<?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>232624</bug_id>
          
          <creation_ts>2021-11-02 07:15:01 -0700</creation_ts>
          <short_desc>[JSC] Make sharing of unlinked baseline code possible on JSVALUE32_64</short_desc>
          <delta_ts>2021-11-22 04:14:38 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geza Lore">glore</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>angelos</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jbedard</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rniwa</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1811100</commentid>
    <comment_count>0</comment_count>
    <who name="Geza Lore">glore</who>
    <bug_when>2021-11-02 07:15:01 -0700</bug_when>
    <thetext>[JSC] Enable sharing of unlinked baseline code on JSVALUE32_64</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1811103</commentid>
    <comment_count>1</comment_count>
      <attachid>443087</attachid>
    <who name="Geza Lore">glore</who>
    <bug_when>2021-11-02 07:17:19 -0700</bug_when>
    <thetext>Created attachment 443087
WIP - EWS sanity check</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1811127</commentid>
    <comment_count>2</comment_count>
      <attachid>443094</attachid>
    <who name="Geza Lore">glore</who>
    <bug_when>2021-11-02 08:38:20 -0700</bug_when>
    <thetext>Created attachment 443094
v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1811149</commentid>
    <comment_count>3</comment_count>
      <attachid>443100</attachid>
    <who name="Geza Lore">glore</who>
    <bug_when>2021-11-02 09:22:11 -0700</bug_when>
    <thetext>Created attachment 443100
v2 - More Windows register conflict fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1811437</commentid>
    <comment_count>4</comment_count>
      <attachid>443189</attachid>
    <who name="Geza Lore">glore</who>
    <bug_when>2021-11-03 04:51:58 -0700</bug_when>
    <thetext>Created attachment 443189
v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1811833</commentid>
    <comment_count>5</comment_count>
      <attachid>443297</attachid>
    <who name="Geza Lore">glore</who>
    <bug_when>2021-11-04 05:58:53 -0700</bug_when>
    <thetext>Created attachment 443297
v4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813035</commentid>
    <comment_count>6</comment_count>
      <attachid>443662</attachid>
    <who name="Geza Lore">glore</who>
    <bug_when>2021-11-09 01:58:25 -0800</bug_when>
    <thetext>Created attachment 443662
patch without sharing actually enabled</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813115</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-11-09 06:15:23 -0800</bug_when>
    <thetext>&lt;rdar://problem/85200009&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813597</commentid>
    <comment_count>8</comment_count>
      <attachid>443817</attachid>
    <who name="Geza Lore">glore</who>
    <bug_when>2021-11-10 07:11:44 -0800</bug_when>
    <thetext>Created attachment 443817
fixed jnstricteq</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1815033</commentid>
    <comment_count>9</comment_count>
      <attachid>444242</attachid>
    <who name="Geza Lore">glore</who>
    <bug_when>2021-11-15 06:08:14 -0800</bug_when>
    <thetext>Created attachment 444242
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817069</commentid>
    <comment_count>10</comment_count>
      <attachid>444242</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-19 20:13:34 -0800</bug_when>
    <thetext>Comment on attachment 444242
Patch

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

r=me

&gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:284
&gt; +#elif USE(JSVALUE32_64)

There is no other config, so you can just use &quot;#else&quot;

&gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:1080
&gt; +#elif USE(JSVALUE32_64)

Ditto.

&gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:1089
&gt; +#elif USE(JSVALUE32_64)

Ditto.

&gt; Source/JavaScriptCore/jit/AssemblyHelpers.h:1168
&gt; +#elif USE(JSVALUE32_64)

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817263</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-11-22 04:14:35 -0800</bug_when>
    <thetext>Committed r286111 (244498@main): &lt;https://commits.webkit.org/244498@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 444242.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443087</attachid>
            <date>2021-11-02 07:17:19 -0700</date>
            <delta_ts>2021-11-02 08:37:16 -0700</delta_ts>
            <desc>WIP - EWS sanity check</desc>
            <filename>bug-232624-20211102141717.patch</filename>
            <type>text/plain</type>
            <size>209020</size>
            <attacher name="Geza Lore">glore</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1MTU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
NjljMDk1ODkzYTU3MzY3NWM2ODZhYTk5M2ExODVmMzEwMmUxZGEwLi5hZjBhZjAzZWY5NjZlNTNj
NjI2YzAxYTIzNGQ2NWU1NDlmYjQ4YzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNTggQEAKKzIwMjEtMTEtMDIgIEdlemEgTG9yZSAgPGdsb3JlQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0pTQ10gRW5hYmxlIHNoYXJpbmcgb2YgdW5saW5rZWQgYmFzZWxpbmUgY29kZSBv
biBKU1ZBTFVFMzJfNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzMjYyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdJUAorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlI
ZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6c3RvcmVWYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6aXNOdWxsKToKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjppc05vdE51bGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6
OmVtaXRUdXJuVW5kZWZpbmVkSW50b051bGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6Om5vT3ZlcmxhcCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6bm9PdmVybGFw
SW1wbCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6bm9PdmVybGFwSW1wbFJlZ01h
c2spOgorICAgICAgICAqIGppdC9HUFJJbmZvLmg6CisgICAgICAgICogaml0L0pJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMpOgorICAgICAgICAoSlND
OjpKSVQ6OmxpbmspOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9u
SGFuZGxlcnMpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUQXJpdGht
ZXRpYy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0Qmlu
YXJ5RG91YmxlT3ApOgorICAgICAgICAqIGppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdW5zaWduZWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfaW5jKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlYyk6CisgICAgICAgICog
aml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0KToKKyAgICAg
ICAgKEpTQzo6SklUOjpjb21waWxlU2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9pdGVyYXRvcl9vcGVuKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2l0ZXJhdG9y
X25leHQpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6
Z2V0Q29uc3RhbnRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9h
ZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyk6CisgICAg
ICAgIChKU0M6OmxvYWRBZGRyT2ZDb2RlQmxvY2tDb25zdGFudEJ1ZmZlcik6CisgICAgICAgIChK
U0M6OkpJVDo6bG9hZENvZGVCbG9ja0NvbnN0YW50KToKKyAgICAgICAgKEpTQzo6SklUOjpsb2Fk
Q29kZUJsb2NrQ29uc3RhbnRQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkQ29kZUJs
b2NrQ29uc3RhbnRUYWcpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX21vdik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbmQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF90eXBlb2ZfaXNfdW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX3Vu
ZGVmaW5lZF9vcl9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9mdW5jdGlv
bl9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6CisgICAgICAgIChK
U0M6OkpJVDo6dmFsdWVJc0ZhbHNleUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9qZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX251bGwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamVxX3B0cik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9qbmVxX3B0cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lcSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
anRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OnZhbHVlSXNUcnV0aHlHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2puZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGhyb3cpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BT
dHJpY3RFcUp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Vx
X251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxX251bGwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfdG9fdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9j
cmVhdGVfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3Rv
bSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0TmV3RnVuY0V4cHJDb21tb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3
X2FycmF5X3dpdGhfc2l6ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5
cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xv
Z3VlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWls
KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFu
Y2VvZik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19lbXB0eSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2lzX251bWJlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlw
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19vYmplY3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3RvX3Byb3BlcnR5X2tleSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9ub3QpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfamVxX3B0cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX3B0cik6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamVxKToKKyAgICAgICAg
KEpTQzo6SklUOjpjb21waWxlT3BFcUp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2puZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0
cmljdEVxKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXApOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90
b19udW1iZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19zdHJpbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfdG9fb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wYXJlbnRf
c2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3B1dF9zZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Jlc29s
dmVfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVu
ayk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKToKKyAgICAgICAgKEpT
Qzo6SklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmspOgorICAgICAgICAoSlNDOjpKSVQ6
OnNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9t
X2FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
ZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1l
cmF0b3JfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3Jf
aGFzX293bl9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFdyaXRlQmFycmllcik6
CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIGppdC9KU0ludGVyZmFjZUpJVC5oOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRv
cnMuY3BwOgorICAgICAgICAoSlNDOjpwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhj
ZXB0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6CisKIDIw
MjEtMTEtMDEgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92
ZSBzb21lIHVudXNlZCBIZWFwIGZpZWxkcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggZWM1NmMxMGVhYTBlNGYwNmEyZTMwZTNhYWI2NDZhMGYwZGJiNjhjOC4uODkwYjUwYzY2Nzhl
NjQ4YTQxMDRiOWQ2ZGUwMjc0ZTRiOTRlZTJkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTQ3NzgsNyArNDc3OCw2IEBACiAJCUE3QkZGM0JGMTc5ODY4OTQwMDAyRjQ2MiAvKiBE
RkdGaWx0cmF0aW9uUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0ZpbHRyYXRpb25SZXN1bHQuaDsgcGF0aCA9IGRmZy9ERkdGaWx0cmF0aW9uUmVzdWx0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QzBDNEFBMTY3QzA4Q0QwMDE3MDExRCAvKiBK
U1NjcmlwdFJlZi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Nj
cmlwdFJlZi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QzBDNEFCMTY3QzA4
Q0QwMDE3MDExRCAvKiBKU1NjcmlwdFJlZlByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNTY3JpcHRSZWZQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUE3QzFFOEM4MTEyRTcwMUMwMEEzN0Y5OCAvKiBKSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0MxRUFFQjE3OTg3
QUI2MDAyOTlEQjIgLyogQ0xvb3BTdGFja0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ0xvb3BTdGFja0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTdDMUVBRUMxNzk4N0FCNjAwMjk5REIyIC8qIFN0YWNrVmlzaXRvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IGxpbmVFbmRpbmcgPSAwOyBwYXRoID0gU3RhY2tWaXNp
dG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdDMUVBRUQxNzk4N0FCNjAw
Mjk5REIyIC8qIFN0YWNrVmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdGFja1Zpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY0MDQsNyAr
NjQwMyw2IEBACiAJCQkJNzI2QjkxQUYyNjU4MTY1MzAwOEU2RjgyIC8qIEpJVFBsYW4uaCAqLywK
IAkJCQk3MjEzMUJGNjI2NTg3RUYyMDA3MTE0Q0YgLyogSklUUGxhblN0YWdlLmggKi8sCiAJCQkJ
ODZDQzg1QzMwRUU3QTg5NDAwMjg4NjgyIC8qIEpJVFByb3BlcnR5QWNjZXNzLmNwcCAqLywKLQkJ
CQlBN0MxRThDODExMkU3MDFDMDBBMzdGOTggLyogSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAg
Ki8sCiAJCQkJRkUzQTA2QjgxQzExMDNEOTAwMzkwRkREIC8qIEpJVFJpZ2h0U2hpZnRHZW5lcmF0
b3IuY3BwICovLAogCQkJCUZFM0EwNkI5MUMxMTAzRDkwMDM5MEZERCAvKiBKSVRSaWdodFNoaWZ0
R2VuZXJhdG9yLmggKi8sCiAJCQkJNzIxMzFCRjMyNjU4N0VGMjAwNzExNENGIC8qIEpJVFNhZmVw
b2ludC5jcHAgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50
eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5kZXggZGQ4Y2I2MjcyNDFi
ZTg4Y2VlZjA3NDU5Yzg1ZWYzYzhhOWY4YzgzNy4uMDUzZjMxY2MyYzk5MTAzOTEyOGRlOGM4NmY3
MjljZDI3ODFjMzVhZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtNjU5LDcgKzY1
OSw2IEBAIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCiBqaXQvSklUT3BlcmF0aW9ucy5jcHAKIGpp
dC9KSVRQbGFuLmNwcAogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAotaml0L0pJVFByb3BlcnR5
QWNjZXNzMzJfNjQuY3BwCiBqaXQvSklUUmlnaHRTaGlmdEdlbmVyYXRvci5jcHAKIGppdC9KSVRT
YWZlcG9pbnQuY3BwCiBqaXQvSklUU2l6ZVN0YXRpc3RpY3MuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCAyNDRmMjIyNzkyYzcwZjgxYWQwNzcx
MDdhMTY2MzMyZGM3MzFlZjBmLi40OWVlZjQ3MGE4YjU1MTJlZTgxNTVmOThhNWY5NDY0OWVlZjJk
NDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAg
LTI3Niw3ICsyNzYsMTcgQEAgcHVibGljOgogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMih2YWx1
ZS5wYXlsb2FkKCkpLCByZWdzLnBheWxvYWRHUFIoKSk7CiAjZW5kaWYKICAgICB9Ci0gICAgCisK
KyAgICB2b2lkIHN0b3JlVmFsdWUoSlNWYWx1ZSB2YWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQorICAg
IHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzdG9yZTY0KEltbTY0KEpTVmFsdWU6OmVu
Y29kZSh2YWx1ZSkpLCBhZGRyZXNzKTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAg
IHN0b3JlMzIoSW1tMzIodmFsdWUudGFnKCkpLCBhZGRyZXNzLndpdGhPZmZzZXQoVGFnT2Zmc2V0
KSk7CisgICAgICAgIHN0b3JlMzIoSW1tMzIodmFsdWUucGF5bG9hZCgpKSwgYWRkcmVzcy53aXRo
T2Zmc2V0KFBheWxvYWRPZmZzZXQpKTsKKyNlbmRpZgorICAgIH0KKwogICAgIHZvaWQgc3RvcmVU
cnVzdGVkVmFsdWUoSlNWYWx1ZSB2YWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICNpZiBV
U0UoSlNWQUxVRTY0KQpAQCAtMTA0NSw2ICsxMDU1LDI0IEBAIHB1YmxpYzoKICNlbmRpZgogICAg
IH0KIAorICAgIHZvaWQgaXNOdWxsKEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyBkc3QpCisgICAg
eworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVncy5wYXls
b2FkR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCBkc3QpOworI2VsaWYg
VVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdzLnRhZ0dQUigp
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZyksIGRzdCk7CisjZW5kaWYKKyAgICB9CisK
KyAgICB2b2lkIGlzTm90TnVsbChKU1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgZHN0KQorICAgIHsK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ3MucGF5
bG9hZEdQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgZHN0KTsKKyNlbGlm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVncy50YWdH
UFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpLCBkc3QpOworI2VuZGlmCisgICAg
fQorCiAgICAgSnVtcCBicmFuY2hJZk51bGwoR1BSUmVnIGdwcikKICAgICB7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKQEAgLTExMTQsNiArMTE0MiwxNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBi
cmFuY2hUZXN0UHRyKFplcm8sIHN0cmluZ0ltcGxHUFIsIFRydXN0ZWRJbW0zMihKU1N0cmluZzo6
aXNSb3BlSW5Qb2ludGVyKSk7CiAgICAgfQogCisgICAgdm9pZCBlbWl0VHVyblVuZGVmaW5lZElu
dG9OdWxsKEpTVmFsdWVSZWdzIHJlZ3MpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
ICAgIHN0YXRpY19hc3NlcnQoKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkICYgfkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZykgPT0gSlNWYWx1ZTo6VmFsdWVOdWxsKTsKKyAgICAgICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdzLnBheWxvYWRHUFIoKSk7CisjZWxp
ZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBzdGF0aWNfYXNzZXJ0KChKU1ZhbHVlOjpVbmRl
ZmluZWRUYWcgfCAxKSA9PSBKU1ZhbHVlOjpOdWxsVGFnKTsKKyAgICAgICAgb3IzMihUcnVzdGVk
SW1tMzIoMSksIHJlZ3MudGFnR1BSKCkpOworI2VuZGlmCisgICAgfQorCiAgICAgc3RhdGljIEFk
ZHJlc3MgYWRkcmVzc0ZvckJ5dGVPZmZzZXQocHRyZGlmZl90IGJ5dGVPZmZzZXQpCiAgICAgewog
ICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgYnl0ZU9m
ZnNldCk7CkBAIC0xODQ1LDYgKzE4ODQsNDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHN0
b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKTsKICNlbmRp
ZgogCisgICAgLy8gQ2hlY2tzIHRoYXQgdGhlIGdpdmVuIGxpc3Qgb2YgR1BSUmVncyBhbmQgSlNW
YWx1ZVJlZ3MgZG8gbm90IG92ZXJsYXAuIFVzZSB0aGlzIGluIHN0YXRpYworICAgIC8vIGFzc2Vy
dGlvbnMgdG8gZW5zdXJlIHRoYXQgcmVnaXN0ZXIgYWxpYXNlcyBsaXZlIGF0IHRoZSBzYW1lIHBv
aW50IGRvIG5vdCBtYXAgdG8gdGhlIHNhbWUKKyAgICAvLyBhcmNoaXRlY3R1cmFsIHJlZ2lzdGVy
LgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBub092ZXJsYXAoQXJncy4uLiBhcmdzKSB7IHJldHVybiBub092ZXJsYXBJbXBsKDAsIGFy
Z3MuLi4pOyB9CisKK3ByaXZhdGU6CisgICAgLy8gQmFzZSBjYXNlCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lLi4uIEFyZ3M+CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5vT3ZlcmxhcEltcGwo
dWludDY0X3QpIHsgcmV0dXJuIHRydWU7IH0KKworICAgIC8vIEdQUlJlZyBjYXNlCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5vT3Zl
cmxhcEltcGwodWludDY0X3QgdXNlZCwgUmVnaXN0ZXJJRCBncHIsIEFyZ3MuLi4gYXJncykKKyAg
ICB7CisgICAgICAgIHVuc2lnbmVkIG1hc2sgPSBub092ZXJsYXBJbXBsUmVnTWFzayhncHIpOwor
ICAgICAgICBpZiAodXNlZCAmIG1hc2spCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiBub092ZXJsYXBJbXBsKHVzZWQgfCBtYXNrLCBhcmdzLi4uKTsKKyAgICB9CisK
KyAgICAvLyBKU1ZhbHVlUmVncyBjYXNlCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEFyZ3M+
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5vT3ZlcmxhcEltcGwodWludDY0X3QgdXNlZCwg
SlNWYWx1ZVJlZ3MganNyLCBBcmdzLi4uIGFyZ3MpCisgICAgeworICAgICAgICB1bnNpZ25lZCBt
YXNrID0gbm9PdmVybGFwSW1wbFJlZ01hc2soanNyLnBheWxvYWRHUFIoKSk7CisjaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICAgICAgbWFzayB8PSBub092ZXJsYXBJbXBsUmVnTWFzayhqc3IudGFn
R1BSKCkpOworI2VuZGlmCisgICAgICAgIGlmICh1c2VkICYgbWFzaykKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG5vT3ZlcmxhcEltcGwodXNlZCB8IG1hc2ssIGFy
Z3MuLi4pOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbm9PdmVybGFw
SW1wbFJlZ01hc2soUmVnaXN0ZXJJRCBncHIpCisgICAgeworICAgICAgICBpZiAoZ3ByID09IElu
dmFsaWRHUFJSZWcpCisgICAgICAgICAgICByZXR1cm4gMFVMTDsKKyAgICAgICAgdW5zaWduZWQg
Yml0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdwcik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGJpdCA8IHNpemVvZih1aW50NjRfdCkgKiBDSEFSX0JJVCk7CisgICAgICAgIHJldHVybiAxVUxM
IDw8IGJpdDsKKyAgICB9CisKIHByb3RlY3RlZDoKICAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChHUFJSZWcgY2FsbGVlU2F2ZXNCdWZmZXIp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCmluZGV4IGIyMGUzMzFiNTVjZjMyYTEy
OTE3MTkyMDA1M2U4NWM0NGQ1YTEzZDkuLjNmODgzZTVlMTFlNjNjMTY4NGZlZjQ5YWE0M2YyYjYy
MzM0NjM0M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCkBAIC05MjAsMTMgKzky
MCw0MyBAQCBwdWJsaWM6CiAKICNlbmRpZiAvLyBDUFUoUklTQ1Y2NCkKIAorLy8gVG8gbWFrZSBz
b21lIGNvZGUgZ2VuZXJpYyBvdmVyIGJvdGggSlNWQUxVRTY0IGFuZCBKU1ZBTFVFMzJfNjQgcGxh
dGZvcm1zLCB3ZSB1c2Ugc3RhbmRhcmQgbmFtZXMKKy8vIGZvciBjZXJ0YWluIEpTVmFsdWVSZWdz
IGluc3RhbmNlcy4gT24gSlNWQUxVRTY0LCBhIEpTVmFsdWVSZWdzIGNvcnJlc3BvbmRzIHRvIGEg
c2luZ2xlIDY0LWJpdAorLy8gYXJjaGl0ZWN0dXJhbCBHUFIsIHdoaWxlIG9uIEpTVkFMVUUzMl82
NCwgYSBKU1ZhbHVlUmVncyBjb3JyZXNwb25kcyB0byBhIHBhaXIgb2YgMzItYml0CisvLyBhcmNo
aXRlY3R1cmFsIEdQUnMuIE5ldmVydGhlbGVzcywgYSBsb3Qgb2YgdGhlIGRpZmZlcmVuY2UgYmV0
d2VlbiB0aGUgdGFyZ2V0cyBjYW4gYmUgYWJzdHJhY3RlZAorLy8gb3ZlciB1c2luZyB0aGUgZm9s
bG93aW5nIGFsaWFzZXMuIFNlZSBBc3NlbWJseUhlbHBlcjo6bm9PdmVybGFwIGZvciBjYXRjaGlu
ZyBjb25mbGljdGluZyByZWdpc3RlcgorLy8gYWxpYXNpbmcgc3RhdGljYWxseS4KK2NsYXNzIEpT
UkluZm8geworcHVibGljOgorICAgIC8vIFRlbXBvcmFyeSByZWdpc3RlcnMuCisgICAgLy8gT24g
SlNWQUxVRTY0LCBqc1JlZ1R7MipuKzF9ezIqbn0gYWx3YXlzIG1hcHMgb25lLXRvLW9uZSB0byBH
UFIgcmVnVHsyKm59CisgICAgLy8gT24gSlNWQUxVRTMyXzY0LCBqc1JlZ1R7MipuKzF9ezIqbn0g
YWx3YXlzIG1hcHMgdG8gdGhlIEdQUiBwYWlyIHJlZ1R7MipuKzF9IC8gcmVnVHsyKm59CisgICAg
Ly8gVGhpcyBtYXBwaW5nIGlzIGRlbGliZXJhdGVseSBzaW1wbGUgdG8gZWFzZSByZWFzb25pbmcg
YWJvdXQgYWxpYXNpbmcuIEUuZy46CisgICAgLy8gU2VlaW5nICdqc1JlZ1QxMCcgaW5kaWNhdGVz
IHRoYXQgaW4gZ2VuZXJhbCBib3RoICdyZWdUMScgYW5kICdyZWdUMCcgbWF5IGJlIHVzZWQuCisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICBzdGF0aWMgY29uc3RleHByIEpTVmFsdWVSZWdzIGpzUmVn
VDEwIHsgR1BSSW5mbzo6cmVnVDAgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIEpTVmFsdWVSZWdz
IGpzUmVnVDMyIHsgR1BSSW5mbzo6cmVnVDIgfTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBqc1JlZ1QxMCB7IEdQUkluZm86OnJlZ1Qx
LCBHUFJJbmZvOjpyZWdUMCB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MganNS
ZWdUMzIgeyBHUFJJbmZvOjpyZWdUMywgR1BSSW5mbzo6cmVnVDIgfTsKKyNlbmRpZgorCisgICAg
Ly8gUmV0dXJuIHZhbHVlIHJlZ2lzdGVyCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBzdGF0aWMg
Y29uc3RleHByIEpTVmFsdWVSZWdzIHJldHVyblZhbHVlSlNSIHsgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIgfTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgc3RhdGljIGNvbnN0ZXhwciBK
U1ZhbHVlUmVncyByZXR1cm5WYWx1ZUpTUiB7IEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIgfTsKKyNlbmRpZgorfTsKKwogLy8gVGhlIGJhc2VsaW5lIEpJ
VCB1c2VzICJhY2N1bXVsYXRvciIgc3R5bGUgZXhlY3V0aW9uIHdpdGggcmVnVDAgKGZvciA2NC1i
aXQpCiAvLyBhbmQgcmVnVDAgKyByZWdUMSAoZm9yIDMyLWJpdCkgc2VydmluZyBhcyB0aGUgYWNj
dW11bGF0b3IgcmVnaXN0ZXIocykgZm9yCiAvLyBwYXNzaW5nIHJlc3VsdHMgb2Ygb25lIG9wY29k
ZSB0byB0aGUgbmV4dC4gSGVuY2U6Ci1DT01QSUxFX0FTU0VSVChHUFJJbmZvOjpyZWdUMCA9PSBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVnVDBfbXVzdF9lcXVhbF9yZXR1cm5WYWx1ZUdQUik7
CitzdGF0aWNfYXNzZXJ0KEdQUkluZm86OnJlZ1QwID09IEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQotQ09NUElMRV9BU1NFUlQoR1BSSW5mbzo6cmVnVDEg
PT0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCByZWdUMV9tdXN0X2VxdWFsX3JldHVyblZhbHVl
R1BSMik7CitzdGF0aWNfYXNzZXJ0KEdQUkluZm86OnJlZ1QxID09IEdQUkluZm86OnJldHVyblZh
bHVlR1BSMik7CiAjZW5kaWYKK3N0YXRpY19hc3NlcnQoSlNSSW5mbzo6anNSZWdUMTAgPT0gSlNS
SW5mbzo6cmV0dXJuVmFsdWVKU1IpOwogCiBpbmxpbmUgR1BSUmVnIGV4dHJhY3RSZXN1bHQoR1BS
UmVnIHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0OyB9CiAjaWYgVVNFKEpTVkFMVUU2NCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAppbmRleCA5Mjk0MjQ2MDczNDAwOTExYjZjMzU3Yzc4YTRhMGM2
YTc0ZTlhYWQ0Li4yMjhjZjg2ZTM3MmI4ZDk1Yzg3M2NiMDU3NGU0MDAxNDk2MWZkOTBiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC02NDQsOSArNjQ0LDYgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2Rl
bF9ieV92YWwpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9kZWxfYnlfaWQpCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9zdWIpCi0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2Zyb21fc2NvcGUpCi0jZW5k
aWYKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3B1dF90b19zY29wZSkKIAogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaXRlcmF0b3Jfb3BlbikKQEAgLTEwMTksMTEgKzEwMTYs
NyBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgbV9qaXRDb2RlLT5tX2ppdENvZGVNYXAgPSBqaXRD
b2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpOwogICAgIG1faml0Q29kZS0+YWRvcHRNYXRoSUNzKG1f
bWF0aElDcyk7CiAgICAgbV9qaXRDb2RlLT5tX2NvbnN0YW50UG9vbCA9IFdURk1vdmUobV9jb25z
dGFudFBvb2wpOwotI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgbV9qaXRDb2RlLT5tX2lzU2hhcmVh
YmxlID0gbV9pc1NoYXJlYWJsZTsKLSNlbHNlCi0gICAgbV9qaXRDb2RlLT5tX2lzU2hhcmVhYmxl
ID0gZmFsc2U7Ci0jZW5kaWYKIAogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAg
ICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBt
X3VubGlua2VkQ29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVu
dGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRy
KCkpOwpAQCAtMTA4MCw3ICsxMDczLDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0
aW9uSGFuZGxlcnMoKQogICAgIH0KIAogICAgIGlmICghbV9leGNlcHRpb25DaGVja3MuZW1wdHko
KSkgewotICAgICAgICBtX2V4Y2VwdGlvbkhhbmRsZXIgPSBsYWJlbCgpOwogICAgICAgICBtX2V4
Y2VwdGlvbkNoZWNrcy5saW5rKHRoaXMpOwogCiAgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAppbmRleCBkZTJjNWNlNzcwYmJkNTkzYjdhZTVmZDFhNjUyNjczODk0M2RkOWEx
Li4wMzVlNjZkNzk5NTI0ZTJmYTgyMmUxMjFjNGUyOTZiOGQwYzY4YjE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKQEAgLTI1NCw3ICsyNTQsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgbG9hZENvbnN0YW50KHVuc2lnbmVkIGNvbnN0YW50SW5kZXgsIEdQUlJlZyk7CiAgICAg
cHJpdmF0ZToKICAgICAgICAgdm9pZCBsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyk7Ci0gICAgICAg
IHZvaWQgbG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAg
ICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyLCBKU1ZhbHVl
UmVncyk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgdm9pZCBsb2FkQ29kZUJsb2Nr
Q29uc3RhbnRQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCk7CisgICAgICAgIHZv
aWQgbG9hZENvZGVCbG9ja0NvbnN0YW50VGFnKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCk7
CisjZW5kaWYKIAogICAgICAgICB2b2lkIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1
ZShHUFJSZWcgcmVzdWx0ID0gcmVnVDApOwogCkBAIC0zNTEsNiArMzU1LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIGVudW0gRmluYWxPYmplY3RNb2RlIHsgTWF5QmVGaW5hbCwgS25vd25O
b3RGaW5hbCB9OwogCiAgICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBkc3QpOworICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KTsK
ICAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3Qs
IEpTVmFsdWVSZWdzIHNyYyk7CiAgICAgICAgIHZvaWQgZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3Rl
ciwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVn
aXN0ZXIpOwogCkBAIC0zNjEsMTIgKzM2Niw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBi
b29sIGdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVn
aXN0ZXIgb3AyLCBWaXJ0dWFsUmVnaXN0ZXImIG9wLCBpbnQzMl90JiBjb25zdGFudCk7CiAKICAg
ICAgICAgdm9pZCBlbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2
YWx1ZSk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWRUYWcoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3Rl
cklEIHRhZyk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWRQYXlsb2FkKFZpcnR1YWxSZWdpc3Rlciwg
UmVnaXN0ZXJJRCBwYXlsb2FkKTsKIAotICAgICAgICB2b2lkIGVtaXRMb2FkKGNvbnN0IEpTVmFs
dWUmIHYsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQpOwotICAgICAgICB2b2lk
IGVtaXRMb2FkKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5
bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICB2b2lk
IGVtaXRMb2FkMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBw
YXlsb2FkMSwgVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5
bG9hZDIpOworICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyIHNyYywgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCk7CisgICAgICAgIHZv
aWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyhWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3Rl
cklEIGRzdCk7CiAKICAgICAgICAgdm9pZCBlbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyLCBSZWdp
c3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJh
bWVSZWdpc3Rlcik7CiAgICAgICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoVmlydHVhbFJlZ2lzdGVy
LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyID0gZmFsc2UpOwpAQCAtMzg3
LDcgKzM4OSw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0
KQogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNy
YywgUmVnaXN0ZXJJRCBkc3QpOwotICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxSZWdpc3RlciBz
cmMyLCBSZWdpc3RlcklEIGRzdDIpOwogICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOwogICAgICAg
ICB2b2lkIGVtaXRTdG9yZUNlbGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBwYXls
b2FkLCBib29sIC8qIG9ubHkgdXNlZCBpbiBKU1ZhbHVlMzJfNjQgKi8gPSBmYWxzZSkKICAgICAg
ICAgewpAQCAtNjQ3LDkgKzY0OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVt
aXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSNpZiAhRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7Ci0jZW5kaWYKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAKICAgICAg
ICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYsIFNsb3dQYXRoRnVuY3Rpb24pOwpAQCAtNjcxLDIxICs2Njks
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24o
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
Ym9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnKTsKICAgICAgICAgdm9pZCBlbWl0
VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpOwotICAgICAg
ICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRo
KTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOwotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQ
UlJlZyk7Ci0gICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1
ZSoqIG9wZXJhbmQsIEdQUlJlZyk7Ci0jZWxzZQotICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9t
SW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcgdGFnLCBHUFJSZWcgcGF5
bG9hZCk7Ci0gICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJh
bmQsIEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkKTsKLSNlbmRpZgotICAgICAgICB2b2lkIGVt
aXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQp
OwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0Kik7CiAgICAgICAg
IHZvaWQgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KTsKLSAg
ICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7Ci0gICAgICAgIHZvaWQgZW1pdFB1dEds
b2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKLSAgICAgICAgdm9pZCBlbWl0UHV0Q2xv
c3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKIAogICAgICAgICB2b2lkIGVtaXRJbml0
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIApAQCAtNzMzLDE0ICs3MTgsMTMgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gdmFsdWVJc0ZhbHNleUdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9y
KFZNJik7Ci0KKyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfZnJv
bV9zY29wZUdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mKTsK
ICAgICAgICAgdGVtcGxhdGUgPFJlc29sdmVUeXBlPgogICAgICAgICBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmso
Vk0mKTsKICAgICAgICAgdGVtcGxhdGUgPFJlc29sdmVUeXBlPgogICAgICAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3Bl
VGh1bmsoVk0mKTsKLSNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgICAg
ICBKdW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiAgICAgICAgIHsKQEAgLTk4Nyw5ICs5NzEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrczsKICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRp
b25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2s7Ci0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotICAgICAgICBMYWJlbCBtX2V4Y2VwdGlvbkhhbmRsZXI7Ci0jZW5kaWYKIAogICAgICAg
ICB1bnNpZ25lZCBtX2dldEJ5SWRJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVk
IG1fZ2V0QnlWYWxJbmRleCB7IFVJTlRfTUFYIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRBcml0aG1ldGljLmNwcAppbmRleCA4ZjFhN2M1YjgzNDYxMGFhMGI4YWZjODMxN2I5MWNk
ZTAxNzRlNmIzLi44ZjRkODBiOTljZmM5ZTkxZmUyMzNkNGJlOTI2ZjU2MzdmNjZlYzZlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKQEAgLTIxMCw3ICsy
MTAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdU
MCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QxKTsKIApAQCAtMjM4LDcgKzIz
OSw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvCiAgICAgICAgIGludDMyX3Qgb3AxaW1tID0g
Z2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSk7CiAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29t
bXV0ZShjb25kaXRpb24pLCByZWdUMSwgSW1tMzIob3AxaW1tKSksIHRhcmdldCk7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCBy
ZWdUMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7CiAgICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwogICAgIH0KIH0KQEAg
LTI2NCw3ICsyNjYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1
YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcgogICAgICAgICBpbnQzMl90
IG9wMWltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDEpOwogICAgICAgICBjb21wYXJlMzIo
Y29tbXV0ZShjb25kaXRpb24pLCByZWdUMCwgSW1tMzIob3AxaW1tKSwgcmVnVDApOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwg
cmVnVDEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwogICAgICAgICBjb21wYXJl
MzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKICAgICB9CiAgICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKQEAgLTQyMiw3ICs0MjUsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBBU1NFUlQocmVnVDQgIT0gZWR4KTsKICAgICBBU1NFUlQocmVnVDQgIT0gZWN4KTsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDQsIG9wMiwgZWN4KTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDQpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AyLCBlY3gpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUNCk7CiAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGVjeCk7CiAKQEAgLTQ4MCw3ICs0ODQsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFJlbGF0aW9uYWxDb25kaXRpbwogCiAgICAgLy8gQ2hhcmFjdGVyIGxlc3MuCiAgICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7Ci0gICAgICAgIGVtaXRMb2FkKG9wMiwgcmVn
VDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxLCBy
ZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMSkpOwogICAg
ICAgICBKdW1wTGlzdCBmYWlsdXJlczsKICAgICAgICAgZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmco
cmVnVDAsIHJlZ1QwLCBmYWlsdXJlcyk7CkBAIC00ODksNyArNDkzLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlv
bmFsQ29uZGl0aW8KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoaXNPcGVyYW5kQ29u
c3RhbnRDaGFyKG9wMikpIHsKLSAgICAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAgICAgICAgIEp1bXBMaXN0
IGZhaWx1cmVzOwogICAgICAgICBlbWl0TG9hZENoYXJhY3RlclN0cmluZyhyZWdUMCwgcmVnVDAs
IGZhaWx1cmVzKTsKQEAgLTQ5OCwxNSArNTAyLDE2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlv
CiAgICAgICAgIHJldHVybjsKICAgICB9IAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChv
cDEpKSB7Ci0gICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAgICAgIG5vdEludDMy
T3AyLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1QzKSk7CiAgICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMiwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5k
KG9wMSkuYXNJbnQzMigpKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25z
dGFudEludChvcDIpKSB7Ci0gICAgICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgICAg
IG5vdEludDMyT3AxLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1QxKSk7CiAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5k
KG9wMikuYXNJbnQzMigpKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdExv
YWQyKG9wMSwgcmVnVDEsIHJlZ1QwLCBvcDIsIHJlZ1QzLCByZWdUMik7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMSwgcmVnVDApOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICAgICAgbm90SW50MzJPcDEuYXBw
ZW5kKGJyYW5jaElmTm90SW50MzIocmVnVDEpKTsKICAgICAgICAgbm90SW50MzJPcDIuYXBwZW5k
KGJyYW5jaElmTm90SW50MzIocmVnVDMpKTsKICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25k
aXRpb24sIHJlZ1QwLCByZWdUMiksIHRhcmdldCk7CkBAIC01MzMsMTMgKzUzOCwxNCBAQCB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgUmVsYXRpb25hbAogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICAg
ICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QyLCBJbW0zMihnZXRD
b25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCkpKSwgdGFyZ2V0KTsKICAgICB9IGVsc2UgaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdExvYWQob3AxLCByZWdU
MSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDEsIHJl
Z1QwKTsKICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihn
ZXRDb25zdGFudE9wZXJhbmQob3AyKS5hc0ludDMyKCkpKSwgdGFyZ2V0KTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBlbWl0TG9hZDIob3AxLCByZWdUMSwgcmVnVDAsIG9wMiwgcmVnVDMsIHJlZ1Qy
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMywgcmVnVDIpOwogICAgICAg
ICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsKICAg
ICB9CiB9CkBAIC01NTMsMTMgKzU1OSwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWdu
ZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aQogICAg
IFZpcnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAogICAgIGlmIChpc09wZXJh
bmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1Qy
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QzLCByZWdUMik7CiAg
ICAgICAgIGNvbXBhcmUzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QyLCBJbW0zMihnZXRDb25z
dGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCkpLCByZWdUMCk7CiAgICAgfSBlbHNlIGlmIChpc09w
ZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJl
Z1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7
CiAgICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihnZXRDb25zdGFudE9w
ZXJhbmQob3AyKS5hc0ludDMyKCkpLCByZWdUMCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1p
dExvYWQyKG9wMSwgcmVnVDEsIHJlZ1QwLCBvcDIsIHJlZ1QzLCByZWdUMik7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMSwgcmVnVDApOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICAgICAgY29tcGFyZTMyKGNv
bmRpdGlvbiwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgfQogICAgIGVtaXRTdG9yZUJvb2wo
ZHN0LCByZWdUMCk7CkBAIC01NzUsOCArNTgyLDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW8K
IAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBlbWl0TG9hZChvcDEsIHJlZ1Qx
LCByZWdUMCk7Ci0gICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AyLCByZWdUMywgcmVnVDIpOwogICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwog
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CkBAIC02MDQsNyArNjExLDcgQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcChj
b25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIE9wZXJhbmRUeXBlcyB0eXBlcywKICAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6Okxvd2VzdFRhZykpKTsKIAogICAgICAgICBpZiAoIW9wMklzSW5SZWdpc3RlcnMpCi0g
ICAgICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7CisgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDMsIHJlZ1QyKTsKIAogICAgICAgICBKdW1wIGRv
dWJsZU9wMiA9IGJyYW5jaDMyKEJlbG93LCByZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxv
d2VzdFRhZykpOwogCkBAIC02NjgsNyArNjc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3Vi
bGVPcChjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIE9wZXJhbmRUeXBlcyB0eXBlcywK
ICAgICAgICAgQVNTRVJUKG9wMklzSW5SZWdpc3RlcnMpOwogCiAgICAgICAgIGlmICghb3AxSXNJ
blJlZ2lzdGVycykKLSAgICAgICAgICAgIGVtaXRMb2FkUGF5bG9hZChvcDEsIHJlZ1QwKTsKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKG9wMSwgcmVnVDApOwogCiAg
ICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwCmluZGV4IDIyNWUx
NGExYmUwOGFiZDU1MGFkNjNjNDVlYjUxYTFjNDYyZTFjMjAuLjJkZGJjYjMwNjhiZWQ5Yjc1ODc0
NTgxM2RjNTU0M2VlZTk4ZDVhM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEFyaXRobWV0aWMzMl82NC5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKLSAgICBlbWl0TG9hZChvcDEsIHJl
Z1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdU
MCk7CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RJbnQzMihyZWdUMSkpOwogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwgVHJ1c3RlZEltbTMyKDApKSk7
CkBAIC01OSw3ICs1OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luYyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5jPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29k
ZS5tX3NyY0RzdDsKIAotICAgIGVtaXRMb2FkKHNyY0RzdCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDEsIHJlZ1QwKTsKIAogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90SW50MzIocmVnVDEpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hB
ZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwpAQCAtNzEsNyArNzEsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYz4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKLSAg
ICBlbWl0TG9hZChzcmNEc3QsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmNEc3QsIHJlZ1QxLCByZWdUMCk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dEludDMyKHJlZ1QxKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
CmluZGV4IDA5MTk5MTU4NDY4YzBmZTEwMmI1ZGZiZmEyYmU0ZmUxNzMxOTdlMmIuLjlmNDQxNWUy
OWFkYzJiMDljN2VhOThhYzZmMzhmNWMxOTAwNDkxYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcApAQCAtNDMsMTggKzQzLDEyIEBACiBuYW1lc3BhY2UgSlNDIHsKIAogbmFt
ZXNwYWNlIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBy
ZXR1cm5WYWx1ZUpTUiB7IEdQUkluZm86OnJldHVyblZhbHVlR1BSIH07Ci0gICAgY29uc3RleHBy
IEpTVmFsdWVSZWdzIGNhbGxlZUpTUiB7IEdQUkluZm86OnJlZ1QwIH07Ci0jZWxpZiBVU0UoSlNW
QUxVRTMyXzY0KQotICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXR1cm5WYWx1ZUpTUiB7IEdQ
UkluZm86OnJldHVyblZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIgfTsKLSAgICBj
b25zdGV4cHIgSlNWYWx1ZVJlZ3MgY2FsbGVlSlNSIHsgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86
OnJlZ1QwIH07Ci0jZW5kaWYKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgY2FsbGVlSlNSID0g
SlNSSW5mbzo6anNSZWdUMTA7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIHN0YXRpY19hc3NlcnQoIXJldHVy
blZhbHVlSlNSLnVzZXMoY2FsbEZyYW1lUmVnaXN0ZXIpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG5v
T3ZlcmxhcChyZXR1cm5WYWx1ZUpTUiwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKIAogICAgIC8vIFJl
dHVybiB0aGUgcmVzdWx0IGluIHJldHVyblZhbHVlR1BSIChyZXR1cm5WYWx1ZUdQUjIvcmV0dXJu
VmFsdWVHUFIgb24gMzItYml0KS4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFJldD4oKTsKQEAgLTE2Nyw3ICsxNjEsNyBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZy
YW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlu
a0luZgogICAgIG5vdEJpZ2dlc3QubGluayh0aGlzKTsKICAgICAKICAgICAvLyBJbml0aWFsaXpl
ICd0aGlzJy4KLSAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgdGhpc0pTUiA9IGNhbGxlZUpTUjsg
Ly8gVXNlZCBhcyB0ZW1wb3JhcnkgcmVnaXN0ZXIKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3Mg
dGhpc0pTUiA9IGpzUmVnVDEwOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZhbHVl
LCB0aGlzSlNSKTsKICAgICBzdG9yZVZhbHVlKHRoaXNKU1IsIEFkZHJlc3MocmVnVDUsIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdp
c3RlcikpKSk7CiAKQEAgLTQ3Nyw3ICs0NzEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRv
cl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKICAgICB1c2luZyBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdEpTUjsKICAgICB1c2luZyBCYXNlbGluZUdldEJ5SWRS
ZWdpc3RlcnM6OnN0dWJJbmZvR1BSOwogCi0gICAgc3RhdGljX2Fzc2VydCghcmV0dXJuVmFsdWVK
U1IudXNlcyhzdHViSW5mb0dQUikpOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKHJldHVy
blZhbHVlSlNSLCBzdHViSW5mb0dQUikpOwogICAgIHN0YXRpY19hc3NlcnQocmV0dXJuVmFsdWVK
U1IgPT0gYmFzZUpTUik7IC8vIE90aGVyd2lzZSB3aWxsIG5lZWQgbW92ZShyZXR1cm5WYWx1ZUpT
UiwgYmFzZUpTUikKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VKU1IgPT0gcmVzdWx0SlNSKTsKIApA
QCAtNTgyLDcgKzU3Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogICAgIGFkdmFuY2VUb05leHRDaGVja3BvaW50KCk7
CiAKICAgICAvLyBjYWxsIHJlc3VsdCAoeyBkb25lLCB2YWx1ZSB9IEpTT2JqZWN0KSBpbiByZWdU
MCAgKHJlZ1QxL3JlZ1QwIG9yIDMyLWJpdCkKLSAgICBzdGF0aWNfYXNzZXJ0KCFyZXR1cm5WYWx1
ZUpTUi51c2VzKHN0dWJJbmZvR1BSKSk7CisgICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAocmVz
dWx0SlNSLCBzdHViSW5mb0dQUikpOwogCiAgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGl0ZXJD
YWxsUmVzdWx0SlNSID0gZG9udENsb2JiZXJKU1I7CiAgICAgbW92ZVZhbHVlUmVncyhyZXR1cm5W
YWx1ZUpTUiwgaXRlckNhbGxSZXN1bHRKU1IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZXMuaAppbmRleCBkNjAyZmM5MjZjOTMyOWUyMTJhNGQ1MDdmZDg2ZDA3OGFiYTdiYTFhLi5l
MmFkMmMwZGU2ZjBlMDBlZWM1OTMzN2JiOGMwODRmMzgyZTIxY2Y2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZXMuaApAQCAtNjUsMTIgKzY1LDggQEAgQUxXQVlTX0lOTElORSBi
b29sIEpJVDo6aXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHNyYykKIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogewog
ICAgIEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
IHJldHVybiBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotI2Vsc2UKICAg
ICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbihzcmMpICE9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVD
b25zdGFudCk7CiAgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNy
Yyk7Ci0jZW5kaWYKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dEludFRvQ2Fs
bEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQpAQCAt
Mzk1LDYgKzM5MSw2MiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciBkc3QpCiAgICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQo
KSwgYWRkcmVzc0Zvcihkc3QpKTsKIH0KIAorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBkc3QpCit7
CisgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5
IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0
ZWNvZGVJbmRleCBpcyBzZXQuCisgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAg
aWYgKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxv
Y2soc3JjKSkKKyAgICAgICAgICAgIG1vdmVWYWx1ZShtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRD
b25zdGFudChzcmMpLCBkc3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2FkQ29kZUJs
b2NrQ29uc3RhbnQoc3JjLCBkc3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGxvYWRW
YWx1ZShhZGRyZXNzRm9yKHNyYyksIGRzdCk7Cit9CisKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQor
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXIgc3JjLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkKQoreworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBKU1ZhbHVlUmVncyB7IHRhZywgcGF5bG9hZCB9KTsK
K30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxv
YWQoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpCit7CisgICAgQVNTRVJUKG1f
Ynl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJp
bmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBz
ZXQuCisgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgaWYgKG1fcHJvZmlsZWRD
b2RlQmxvY2stPmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxvY2soc3JjKSkKKyAgICAg
ICAgICAgIG1vdmUoSW1tMzIobV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKS5w
YXlsb2FkKCkpLCBkc3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2FkQ29kZUJsb2Nr
Q29uc3RhbnRQYXlsb2FkKHNyYywgZHN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBs
b2FkMzIocGF5bG9hZEZvcihzcmMpLCBkc3QpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVy
SUQgZHN0KQoreworICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBz
aG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28g
dGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgorICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7
CisgICAgICAgIGlmIChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pc0NvbnN0YW50T3duZWRCeVVubGlu
a2VkQ29kZUJsb2NrKHNyYykpCisgICAgICAgICAgICBtb3ZlKEltbTMyKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmdldENvbnN0YW50KHNyYykudGFnKCkpLCBkc3QpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnRUYWcoc3JjLCBkc3QpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGxvYWQzMih0YWdGb3Ioc3JjKSwgZHN0KTsKK30KKyNlbGlmIFVTRShK
U1ZBTFVFNjQpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KQoreworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCBKU1ZhbHVlUmVncyB7IGRzdCB9KTsKK30KKworQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoVmlydHVhbFJlZ2lzdGVy
IHNyYywgUmVnaXN0ZXJJRCBkc3QpCit7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMs
IEpTVmFsdWVSZWdzIHsgZHN0IH0pOworfQorI2VuZGlmCisKICNpZiBVU0UoSlNWQUxVRTMyXzY0
KQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcs
IEZQUmVnaXN0ZXJJRCB2YWx1ZSkKQEAgLTQwNiw2OSArNDU4LDExIEBAIGlubGluZSB2b2lkIEpJ
VDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVl
KQogICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IocmVnKSwgdmFsdWUpOwogfQogCi1pbmxp
bmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQg
dGFnKQotewotICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIG1vdmUoSW1tMzIo
Z2V0Q29uc3RhbnRPcGVyYW5kKHJlZykudGFnKCkpLCB0YWcpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgbG9hZDMyKHRhZ0ZvcihyZWcpLCB0YWcpOwotfQotCi1pbmxpbmUgdm9pZCBK
SVQ6OmVtaXRMb2FkUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxv
YWQpCi17Ci0gICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgbW92ZShJbW0zMihn
ZXRDb25zdGFudE9wZXJhbmQocmVnKS5wYXlsb2FkKCkpLCBwYXlsb2FkKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGxvYWQzMihwYXlsb2FkRm9yKHJlZyksIHBheWxvYWQpOwotfQot
Ci1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKGNvbnN0IEpTVmFsdWUmIHYsIFJlZ2lzdGVySUQg
dGFnLCBSZWdpc3RlcklEIHBheWxvYWQpCi17Ci0gICAgbW92ZShJbW0zMih2LnBheWxvYWQoKSks
IHBheWxvYWQpOwotICAgIG1vdmUoSW1tMzIodi50YWcoKSksIHRhZyk7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNy
YywgSlNWYWx1ZVJlZ3MgZHN0KQotewotICAgIGVtaXRMb2FkKHNyYywgZHN0LnRhZ0dQUigpLCBk
c3QucGF5bG9hZEdQUigpKTsKLX0KLQogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBKU1ZhbHVlUmVncyBmcm9tKQogewog
ICAgIGVtaXRTdG9yZShkc3QsIGZyb20udGFnR1BSKCksIGZyb20ucGF5bG9hZEdQUigpKTsKIH0K
IAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3Rl
cklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCi17Ci0gICAgUkVM
RUFTRV9BU1NFUlQodGFnICE9IHBheWxvYWQpOwotCi0gICAgaWYgKGJhc2UgPT0gY2FsbEZyYW1l
UmVnaXN0ZXIpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQocGF5bG9hZCAhPSBiYXNlKTsKLSAg
ICAgICAgZW1pdExvYWRQYXlsb2FkKHJlZywgcGF5bG9hZCk7Ci0gICAgICAgIGVtaXRMb2FkVGFn
KHJlZywgdGFnKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChwYXlsb2FkID09
IGJhc2UpIHsgLy8gYXZvaWQgc3RvbXBpbmcgYmFzZQotICAgICAgICBsb2FkMzIodGFnRm9yKHJl
ZywgYmFzZSksIHRhZyk7Ci0gICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKHJlZywgYmFzZSksIHBh
eWxvYWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbG9hZDMyKHBheWxvYWRGb3Io
cmVnLCBiYXNlKSwgcGF5bG9hZCk7Ci0gICAgbG9hZDMyKHRhZ0ZvcihyZWcsIGJhc2UpLCB0YWcp
OwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkMihWaXJ0dWFsUmVnaXN0ZXIgcmVnMSwg
UmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBWaXJ0dWFsUmVnaXN0ZXIgcmVn
MiwgUmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQyKQotewotICAgIGVtaXRMb2Fk
KHJlZzIsIHRhZzIsIHBheWxvYWQyKTsKLSAgICBlbWl0TG9hZChyZWcxLCB0YWcxLCBwYXlsb2Fk
MSk7Ci19Ci0KIGlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciByZWcs
IFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSkKIHsK
ICAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnLCBiYXNlKSk7CkBAIC01NTMsMzQg
KzU0Nyw2IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChW
aXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0CiAKICNlbHNlIC8vIFVTRShKU1ZBTFVF
MzJfNjQpCiAKLS8vIGdldCBhcmcgcHV0cyBhbiBhcmcgZnJvbSB0aGUgU0YgcmVnaXN0ZXIgYXJy
YXkgaW50byBhIGgvdyByZWdpc3RlcgotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKLXsKLSAg
ICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29k
ZUluZGV4IGlzIHNldC4KLQotICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIGlm
IChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2Nr
KHNyYykpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2Nr
LT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICAgICAgbW92ZShJbW02NChKU1ZhbHVlOjplbmNv
ZGUodmFsdWUpKSwgZHN0KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBsb2FkQ29kZUJs
b2NrQ29uc3RhbnQoc3JjLCBkc3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbG9h
ZDY0KGFkZHJlc3NGb3Ioc3JjKSwgZHN0KTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBk
c3QpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIGRzdC5wYXlsb2FkR1BSKCkp
OwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhW
aXJ0dWFsUmVnaXN0ZXIgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
MiwgUmVnaXN0ZXJJRCBkc3QyKQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwg
ZHN0MSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKLX0KLQogQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBSZWdpc3RlcklEIGZyb20pCiB7CiAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9y
KGRzdCkpOwpAQCAtNzI1LDE0ICs2OTEsMzQgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9h
ZEdsb2JhbE9iamVjdChHUFJSZWcgcmVzdWx0KQogICAgIGxvYWRDb25zdGFudChtX2dsb2JhbE9i
amVjdENvbnN0YW50LCByZXN1bHQpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2Fk
Q29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIGNvbnN0YW50LCBHUFJSZWcgcmVzdWx0
KQorQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBsb2FkQWRkck9mQ29kZUJsb2NrQ29uc3RhbnRC
dWZmZXIoSklUICZqaXQsIEdQUlJlZyBkc3QpCit7CisgICAgaml0LmxvYWRQdHIoaml0LmFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgZHN0KTsKKyAgICBqaXQubG9hZFB0cihK
SVQ6OkFkZHJlc3MoZHN0LCBDb2RlQmxvY2s6Om9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVy
KCkpLCBkc3QpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkQ29kZUJsb2NrQ29u
c3RhbnQoVmlydHVhbFJlZ2lzdGVyIGNvbnN0YW50LCBKU1ZhbHVlUmVncyBkc3QpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoY29uc3RhbnQuaXNDb25zdGFudCgpKTsKLSAgICBsb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVzdWx0KTsKLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVzdWx0LCBDb2RlQmxvY2s6Om9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKCkp
LCByZXN1bHQpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIGNvbnN0YW50LnRvQ29uc3Rh
bnRJbmRleCgpICogc2l6ZW9mKHZvaWQqKSksIHJlc3VsdCk7CisgICAgbG9hZEFkZHJPZkNvZGVC
bG9ja0NvbnN0YW50QnVmZmVyKCp0aGlzLCBkc3QucGF5bG9hZEdQUigpKTsKKyAgICBsb2FkVmFs
dWUoQWRkcmVzcyhkc3QucGF5bG9hZEdQUigpLCBjb25zdGFudC50b0NvbnN0YW50SW5kZXgoKSAq
IHNpemVvZihSZWdpc3RlcikpLCBkc3QpOwogfQogCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKK0FM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudFBheWxvYWQoVmlydHVh
bFJlZ2lzdGVyIGNvbnN0YW50LCBSZWdpc3RlcklEIGRzdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VChjb25zdGFudC5pc0NvbnN0YW50KCkpOworICAgIGxvYWRBZGRyT2ZDb2RlQmxvY2tDb25zdGFu
dEJ1ZmZlcigqdGhpcywgZHN0KTsKKyAgICBsb2FkMzIoQWRkcmVzcyhkc3QsIGNvbnN0YW50LnRv
Q29uc3RhbnRJbmRleCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpLCBkc3Qp
OworfQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvZGVCbG9ja0NvbnN0YW50VGFnKFZp
cnR1YWxSZWdpc3RlciBjb25zdGFudCwgUmVnaXN0ZXJJRCBkc3QpCit7CisgICAgUkVMRUFTRV9B
U1NFUlQoY29uc3RhbnQuaXNDb25zdGFudCgpKTsKKyAgICBsb2FkQWRkck9mQ29kZUJsb2NrQ29u
c3RhbnRCdWZmZXIoKnRoaXMsIGRzdCk7CisgICAgbG9hZDMyKEFkZHJlc3MoZHN0LCBjb25zdGFu
dC50b0NvbnN0YW50SW5kZXgoKSAqIHNpemVvZihSZWdpc3RlcikgKyBUYWdPZmZzZXQpLCBkc3Qp
OworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmluZGV4IGY4NDQ1ODc4
MDNjMjYxOGM2ODAzOTgzNmNlZTZjN2IzNGZkMmMzMDQuLjU4MGYyN2UyZjI1MzE3ZmRlYzFhMDMy
MGIzYTJlMGJjMzVhYTgxNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcApAQCAtNDUsOCArNDUsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotI2lmIFVTRShKU1ZB
TFVFNjQpCi0KIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTW92PigpOwpAQCAtNTUsMjYgKzUzLDIzIEBAIHZvaWQgSklUOjplbWl0X29wX21vdihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgaWYgKHNyYy5pc0Nv
bnN0YW50KCkpIHsKICAgICAgICAgaWYgKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3RhbnRP
d25lZEJ5VW5saW5rZWRDb2RlQmxvY2soc3JjKSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0gICAgICAgICAgICBz
dG9yZTY0KEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOwor
ICAgICAgICAgICAgc3RvcmVWYWx1ZShtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChz
cmMpLCBhZGRyZXNzRm9yKGRzdCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbG9h
ZENvZGVCbG9ja0NvbnN0YW50KHNyYywgcmVnVDApOwotICAgICAgICAgICAgc3RvcmU2NChyZWdU
MCwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChz
cmMsIGpzUmVnVDEwKTsKKyAgICAgICAgICAgIHN0b3JlVmFsdWUoanNSZWdUMTAsIGFkZHJlc3NG
b3IoZHN0KSk7CiAgICAgICAgIH0KLQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbG9h
ZDY0KGFkZHJlc3NGb3Ioc3JjKSwgcmVnVDApOwotICAgIHN0b3JlNjQocmVnVDAsIGFkZHJlc3NG
b3IoZHN0KSk7CisgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3Ioc3JjKSwganNSZWdUMTApOworICAg
IHN0b3JlVmFsdWUoanNSZWdUMTAsIGFkZHJlc3NGb3IoZHN0KSk7CiB9CiAKLQogdm9pZCBKSVQ6
OmVtaXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbmQ+KCk7Ci0gICAg
UkVMRUFTRV9BU1NFUlQocmV0dXJuVmFsdWVHUFIgIT0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIp
OworICAgIHN0YXRpY19hc3NlcnQoIXJldHVyblZhbHVlSlNSLnVzZXMoY2FsbEZyYW1lUmVnaXN0
ZXIpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVy
blZhbHVlSlNSKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZW1pdEZ1bmN0
aW9uRXBpbG9ndWUoKTsKICAgICByZXQoKTsKQEAgLTg3LDYgKzgyLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfam1wKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRk
SnVtcChqdW1wKCksIHRhcmdldCk7CiB9CiAKKwogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwpAQCAtMTA1LDcg
KzEwMSw4IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3Ry
dWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CiAgICAgZW1pdElu
aXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAgICAgbXV0YXRv
ckZlbmNlKCptX3ZtKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
KTsKKyAgICBib3hDZWxsKHJlc3VsdFJlZywganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIGpzUmVnVDEwKTsKIAogICAgIGFkZFNsb3dDYXNlKHNs
b3dDYXNlcyk7CiB9CkBAIC0xMTksOSArMTE2LDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9u
ZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxP
cGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVj
dHVyZVJlZyk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBi
b3hDZWxsKHJldHVyblZhbHVlR1BSLCByZXR1cm5WYWx1ZUpTUik7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlSlNSKTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQp
CisKIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hhc0luc3RhbmNlPigpOwpAQCAtMjEwLDEyICsy
MTAsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFu
Y2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQotewotICAgIC8vIFRoaXMgYWx3YXlzIGdv
ZXMgdG8gc2xvdyBwYXRoIHNpbmNlIHdlIGV4cGVjdCBpdCB0byBiZSByYXJlLgotICAgIGFkZFNs
b3dDYXNlKGp1bXAoKSk7Ci19Ci0gICAgCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0eT4oKTsKQEAgLTIyOSwzMyArMjIzLDM5
IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCisjZW5k
aWYKKwogdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGpzUmVnVDEwKTsKKyAgICBKdW1wIGlzQ2VsbCA9
IGJyYW5jaElmQ2VsbChqc1JlZ1QxMCk7CiAKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7CisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICBjb21wYXJlNjQoRXF1YWwsIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOworI2VsaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICBjb21wYXJlMzIoRXF1YWwsIGpzUmVnVDEwLnRhZ0dQUigpLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworI2VuZGlmCiAgICAgSnVt
cCBkb25lID0ganVtcCgpOwogICAgIAogICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIEp1bXAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpOworICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
YnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwogICAgIEp1bXAgbm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKIAogICAgIGlzTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCBy
ZWdUMSwgcmVnVDIpOworICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGpzUmVnVDEwLnBheWxv
YWRHUFIoKSwgcmVnVDEsIHJlZ1QyKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZWdUMSk7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CiAK
ICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZG9uZS5saW5r
KHRoaXMpOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpz
UmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjY0LDE1ICsyNjQsMTcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIGpzUmVnVDEwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6
VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgZW1pdFR1cm5VbmRlZmlu
ZWRJbnRvTnVsbChqc1JlZ1QxMCk7CisgICAgaXNOdWxsKGpzUmVnVDEwLCByZWdUMCk7CiAKLSAg
ICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBib3hCb29sZWFuKHJlZ1QwLCBqc1JlZ1QxMCk7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGpzUmVnVDEwKTsKIH0KIAorI2lmIFVTRShK
U1ZBTFVFNjQpCisKIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsKQEAgLTQxOCwxNSArNDIwLDI1IEBAIHZvaWQg
SklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKKyNl
bmRpZgorCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgYXJndW1lbnRHUFIxKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgYXJndW1lbnRHUFIyKTsKLSAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
ZXRGdW5jdGlvbk5hbWUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIp
OworCisgICAgdXNpbmcgU2xvd09wZXJhdGlvbiA9IGRlY2x0eXBlKG9wZXJhdGlvblNldEZ1bmN0
aW9uTmFtZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJy
ZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
ZnVuY3Rpb25HUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAxPigpOwor
ICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBuYW1lSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8
U2xvd09wZXJhdGlvbiwgMj4oKTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2Fk
KGJ5dGVjb2RlLm1fZnVuY3Rpb24sIGZ1bmN0aW9uR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgbmFtZUpTUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChn
bG9iYWxPYmplY3RHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25O
YW1lLCBnbG9iYWxPYmplY3RHUFIsIGZ1bmN0aW9uR1BSLCBuYW1lSlNSKTsKIH0KIAorI2lmIFVT
RShKU1ZBTFVFNjQpCisKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTm90PigpOwpAQCAtNDQyLDIxICs0NTQsMjQgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKKyNlbmRpZgorCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpmYWxzZT4o
KTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0g
cmVnVDA7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHZhbHVlID0ganNSZWdUMTA7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CiAj
aWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aDEgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9
IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7Cisg
ICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAodmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZ2xv
YmFsT2JqZWN0R1BSKSk7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gdHJ1ZTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQ
Uik7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSks
IHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOworICAgIGFkZEp1bXAo
YnJhbmNoSWZGYWxzZXkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwg
ZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RH
UFIpLCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0
dWIodmFsdWVJc0ZhbHNleUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAg
ICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC00NzMs
NiArNDg4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnZh
bHVlSXNGYWxzZXlHZW5lcmF0b3IoVk0mIHZtKQogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAg
ICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgc3RhdGljX2Fzc2VydCh2YWx1
ZSA9PSBqc1JlZ1QxMC5wYXlsb2FkR1BSKCkpOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aDEgPSByZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CiAgICAg
Y29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsK
QEAgLTUwMyw0OCArNTE5LDUxIEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywganNSZWdU
MTApOworICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoanNSZWdUMTApOwog
CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwor
ICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywg
QWRkcmVzcyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICBlbWl0TG9h
ZFN0cnVjdHVyZSh2bSgpLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIHJlZ1QyLCByZWdUMSk7CiAg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWws
IEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCks
IHRhcmdldCk7CiAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1
bXAoKTsKIAogICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5l
ZCAmIG51bGwKICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNo
NjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkp
LCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgIGVtaXRUdXJuVW5kZWZpbmVkSW50b051bGwoanNS
ZWdUMTApOworICAgIGFkZEp1bXAoYnJhbmNoSWZOdWxsKGpzUmVnVDEwKSwgdGFyZ2V0KTsKIAog
ICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIG1hc3F1ZXJh
ZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7Ci19OworfQorCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxs
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIGpzUmVnVDEwKTsKKyAgICBKdW1wIGlzSW1tZWRpYXRl
ID0gYnJhbmNoSWZOb3RDZWxsKGpzUmVnVDEwKTsKIAogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlND
ZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVj
dHVyZS4KLSAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKSwgdGFyZ2V0KTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVn
VDIsIHJlZ1QxKTsKKyAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoanNSZWdU
MTAucGF5bG9hZEdQUigpLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwganNSZWdUMTAucGF5bG9hZEdQUigpLCByZWdUMiwgcmVnVDEpOwogICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBB
ZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0
YXJnZXQpOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwogCiAgICAgLy8gTm93
IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAogICAgIGlzSW1t
ZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAg
ICAgICAgCisgICAgZW1pdFR1cm5VbmRlZmluZWRJbnRvTnVsbChqc1JlZ1QxMCk7CisgICAgYWRk
SnVtcChicmFuY2hJZk5vdE51bGwoanNSZWdUMTApLCB0YXJnZXQpOwogCiAgICAgd2FzTm90SW1t
ZWRpYXRlLmxpbmsodGhpcyk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEp1bmRlZmluZWRPck51bGw+KCk7CkBAIC01NzYsNyArNTk1LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfamVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
Ci0gICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJl
Z1QxKTsKKyAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRl
ciwgSlNWYWx1ZVJlZ3MgeyByZWdUMSB9KTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwg
cmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKIH0KIApAQCAtNTg3LDcgKzYwNiw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjLCByZWdUMCk7Ci0gICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lh
bFBvaW50ZXIsIHJlZ1QxKTsKKyAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoYnl0ZWNvZGUubV9z
cGVjaWFsUG9pbnRlciwgSlNWYWx1ZVJlZ3MgeyByZWdUMSB9KTsKICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSk7CiAgICAgc3RvcmU4
VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoMSksIGJ5dGVjb2RlLCBPcEpuZXFQdHI6Ok1ldGFkYXRh
OjpvZmZzZXRPZkhhc0p1bXBlZCgpKTsKICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKQEAg
LTU5Nyw3ICs2MTYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBjb21wYXJlMzIoRXF1YWwsIHJl
Z1QxLCByZWdUMCwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsg
cmVnVDAgfSk7CkBAIC02MDgsMjYgKzYyOCwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRl
Y29kZS5tX3JocywgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9saHMsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcmhz
LCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVn
VDIpOwogICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7
CiB9CiAKKyNlbmRpZgorCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgY29u
c3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyB2
YWx1ZSA9IGpzUmVnVDEwOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2NvbmRpdGlvbiwgdmFsdWUpOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoMiA9IHJlZ1QyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0g
cmVnVDM7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2Jh
bE9iamVjdEdQUiA9IHJlZ1Q0OworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKHZhbHVlLCBz
Y3JhdGNoMSwgc2NyYXRjaDIsIGdsb2JhbE9iamVjdEdQUikpOwogICAgIGNvbnN0ZXhwciBib29s
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAgICAgbG9hZEdsb2Jh
bE9iamVjdChnbG9iYWxPYmplY3RHUFIpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0o
KSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVn
VDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwg
dGFyZ2V0KTsKKyAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIHZhbHVlLCBzY3JhdGNo
MSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2Vk
TmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IpLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVn
VDApLCB0YXJnZXQpOwpAQCAtNjQ0LDYgKzY2OCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjp2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJiB2bSkKICAgICBD
Q2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwor
ICAgIHN0YXRpY19hc3NlcnQodmFsdWUgPT0ganNSZWdUMTAucGF5bG9hZEdQUigpKTsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBz
Y3JhdGNoMiA9IHJlZ1QyOwogICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IHRydWU7CkBAIC02NjgsMTAgKzY5MywxMyBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6dmFsdWVJc1RydXRoeUdlbmVyYXRvcihWTSYg
dm0pCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKKyNpZiBVU0UoSlNW
QUxVRTY0KQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5lcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xo
cywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2xocywgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDAsIHJlZ1QxLCByZWdUMik7CiAgICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAs
IHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwpA
QCAtNjgzLDIxICs3MTEsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3Jo
cywgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9saHMsIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7
CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAg
IGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CiB9CiAK
KyNlbmRpZgorCiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wVGhyb3c+KCk7Ci0gICAgQVNTRVJUKHJlZ1QwID09IHJldHVyblZhbHVlR1BSKTsK
KyAgICBzdGF0aWNfYXNzZXJ0KHJlZ1QwID09IHJldHVyblZhbHVlR1BSKTsKIAogI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOwotICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDEpOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBy
ZWdUMSwgcmVnVDApOworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRp
b25UaHJvdyk7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJy
ZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVl
UmVncyB2YWx1ZUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDE+KCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUpTUik7
CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGNhbGxPcGVyYXRp
b25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBnbG9iYWxPYmplY3RHUFIsIHZhbHVl
SlNSKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25z
dGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwpAQCAtNzQwLDYg
Kzc3NCw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90
aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIH0KICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisKIHRlbXBsYXRlPHR5cGVuYW1lIE9w
Pgogdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CkBAIC03NDgsNyArNzg0LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0
cmljdEVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
MiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwg
cmVnVDAsIHNyYzIsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIHJlZ1QxKTsKIAogI2lmIFVT
RShCSUdJTlQzMikKICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBl
JyB0byBiZSBTdHJpY3RFcSk6CkBAIC04MzMsNyArODcwLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVP
cFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
IFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCByZWdUMSk7CiAK
ICNpZiBVU0UoQklHSU5UMzIpCiAgICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWlu
ZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgpAQCAtMTA0OCw2ICsxMDg2LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3QsIHJlZ1QwKTsKIH0KIAor
I2VuZGlmCisKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFN3aXRjaEltbT4oKTsKQEAgLTEwNjEsMTYgKzExMDEsMTcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5
dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAg
ICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGF1dG8gbm90SW50MzIg
PSBicmFuY2hJZk5vdEludDMyKHJlZ1QwKTsKLSAgICBzdWIzMihJbW0zMih1bmxpbmtlZFRhYmxl
Lm1fbWluKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBq
c1JlZ1QxMCk7CisgICAgYXV0byBub3RJbnQzMiA9IGJyYW5jaElmTm90SW50MzIoanNSZWdUMTAp
OworICAgIHN1YjMyKEltbTMyKHVubGlua2VkVGFibGUubV9taW4pLCBqc1JlZ1QxMC5wYXlsb2Fk
R1BSKCkpOwogCi0gICAgYWRkSnVtcChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QwLCBJbW0z
MihsaW5rZWRUYWJsZS5tX2N0aU9mZnNldHMuc2l6ZSgpKSksIGRlZmF1bHRPZmZzZXQpOwotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihsaW5rZWRUYWJsZS5tX2N0aU9mZnNldHMuZGF0YSgpKSwgcmVn
VDEpOwotICAgIGZhckp1bXAoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgU2NhbGVQdHIpLCBKU1N3
aXRjaFB0clRhZyk7CisgICAgYWRkSnVtcChicmFuY2gzMihBYm92ZU9yRXF1YWwsIGpzUmVnVDEw
LnBheWxvYWRHUFIoKSwgSW1tMzIobGlua2VkVGFibGUubV9jdGlPZmZzZXRzLnNpemUoKSkpLCBk
ZWZhdWx0T2Zmc2V0KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobGlua2VkVGFibGUubV9jdGlP
ZmZzZXRzLmRhdGEoKSksIHJlZ1QyKTsKKyAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwganNS
ZWdUMTAucGF5bG9hZEdQUigpLCBTY2FsZVB0ciksIHJlZ1QyKTsKKyAgICBmYXJKdW1wKHJlZ1Qy
LCBKU1N3aXRjaFB0clRhZyk7CiAKICAgICBub3RJbnQzMi5saW5rKHRoaXMpOwotICAgIGNhbGxP
cGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5
VHlwZSwgJnZtKCksIHJlZ1QwLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKKyAg
ICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5r
bm93bktleVR5cGUsICZ2bSgpLCBqc1JlZ1QxMCwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5t
X21pbik7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQog
CkBAIC0xMDg5LDkgKzExMzAsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBtX3N3aXRjaGVzLmFwcGVu
ZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0
LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRh
YmxlKHVubGlua2VkVGFibGUpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGlu
ZWUsIGFyZ3VtZW50R1BSMSk7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwg
YXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9t
aW4pOworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25Td2l0Y2hD
aGFyV2l0aFVua25vd25LZXlUeXBlKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVj
dEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29u
c3RleHByIEpTVmFsdWVSZWdzIHNjcnV0aW5lZUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNs
b3dPcGVyYXRpb24sIDE+KCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5l
ZSwgc2NydXRpbmVlSlNSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBl
LCBnbG9iYWxPYmplY3RHUFIsIHNjcnV0aW5lZUpTUiwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJs
ZS5tX21pbik7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwog
fQogCkBAIC0xMTA4LDkgKzExNTMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmlu
Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIG1fc3dpdGNoZXMu
YXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRP
ZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJ
VGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0
aW5lZSwgYXJndW1lbnRHUFIxKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5
cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4KTsKKyAgICB1c2luZyBT
bG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25L
ZXlUeXBlKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJl
ZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVS
ZWdzIHNjcnV0aW5lZUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDE+
KCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgc2NydXRpbmVlSlNS
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGdsb2JhbE9iamVj
dEdQUiwgc2NydXRpbmVlSlNSLCB0YWJsZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVl
R1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKQEAgLTExMjAsMTUgKzExNjksMTUgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5v
dENlbGwocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwganNSZWdUMTAp
OworICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoanNSZWdUMTApOwogCi0g
ICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGpzUmVnVDEwLnBheWxvYWRHUFIo
KSwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CiAgICAg
SnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwogCiAgICAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwganNS
ZWdUMTAucGF5bG9hZEdQUigpLCByZWdUMiwgcmVnVDEpOwogICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmpl
Y3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIs
IHJlZ1QwKTsKQEAgLTExMzYsMTQgKzExODUsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgaXNJbW1lZGlh
dGUubGluayh0aGlzKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgZW1pdFR1cm5VbmRlZmluZWRJbnRv
TnVsbChqc1JlZ1QxMCk7CisgICAgaXNOdWxsKGpzUmVnVDEwLCByZWdUMCk7CiAKICAgICB3YXNO
b3RJbW1lZGlhdGUubGluayh0aGlzKTsKICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBib3hCb29sZWFuKHJl
Z1QwLCBqc1JlZ1QxMCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGpzUmVnVDEw
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExNTIsMTUgKzEyMDEsMTUgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIGpzUmVnVDEwKTsKKyAgICBK
dW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGpzUmVnVDEwKTsKIAotICAgIEp1bXAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpOworICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
YnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwogICAgIEp1bXAgd2Fz
Tm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKIAogICAgIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1Qw
LCByZWdUMiwgcmVnVDEpOworICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGpzUmVnVDEwLnBh
eWxvYWRHUFIoKSwgcmVnVDIsIHJlZ1QxKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsK
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdU
MCk7CkBAIC0xMTY4LDE2ICsxMjE3LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICBpc0ltbWVkaWF0ZS5s
aW5rKHRoaXMpOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRU
YWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICBlbWl0VHVyblVuZGVmaW5lZEludG9O
dWxsKGpzUmVnVDEwKTsKKyAgICBpc05vdE51bGwoanNSZWdUMTAsIHJlZ1QwKTsKIAogICAgIHdh
c05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwogICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQubGluayh0aGlzKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGJveEJvb2xlYW4o
cmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdU
MTApOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKwogdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIo
Y29uc3QgSW5zdHJ1Y3Rpb24qKQogewogICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVz
ZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudApAQCAtMTMwNCwxNiArMTM1NSwxOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOwogfQogCisjZW5kaWYK
Kwogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVG9UaGlzPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNE
c3QsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0
LCBqc1JlZ1QxMCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwor
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChqc1JlZ1QxMCk7CiAKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOworICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90VHlwZShqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEZpbmFsT2JqZWN0
VHlwZSkpOwogICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BUb1RoaXM6Ok1ldGFk
YXRhOjpvZmZzZXRPZkNhY2hlZFN0cnVjdHVyZUlEKCksIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDIpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRk
cmVzcyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMzI4LDcgKzEzODEsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIFJlZ2lzdGVySUQgY2FjaGVkRnVuY3Rpb25SZWcgPSByZWdUNDsKICAgICBSZWdp
c3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Y2FsbGVlLCBjYWxsZWVSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGNh
bGxlZSwgY2FsbGVlUmVnKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEZ1bmN0aW9uKGNh
bGxlZVJlZykpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246Om9m
ZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsKICAgICBhZGRTbG93
Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnLCBUcnVzdGVkSW1tMzIoSlNGdW5j
dGlvbjo6cmFyZURhdGFUYWcpKSk7CkBAIC0xMzQ3LDkgKzE0MDAsMTIgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsK
ICAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgYm94Q2VsbChy
ZXN1bHRSZWcsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0LCBqc1JlZ1QxMCk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorCiB2b2lkIEpJVDo6
ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6
PigpOwpAQCAtMTQwNSw2ICsxNDYxLDE0IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzCiAgICAg
ZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKIH0KIAorI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCisKK3ZvaWQgSklUOjplbWl0X29w
X2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikKK3sKKyAgICAvLyBUaGlzIGFs
d2F5cyBnb2VzIHRvIHNsb3cgcGF0aCBzaW5jZSB3ZSBleHBlY3QgaXQgdG8gYmUgcmFyZS4KKyAg
ICBhZGRTbG93Q2FzZShqdW1wKCkpOworfQorCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFu
Y2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwpAQCAtMTQxNSwxNiArMTQ3OSwyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5z
dGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVgog
ICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0lu
c3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3Is
IEdQUkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJ
bnN0YW5jZVZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwotICAgIGxvYWRHbG9iYWxPYmpl
Y3QoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklu
c3RhbmNlT2ZDdXN0b20sIEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRH
UFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7Ci0gICAg
Ym94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQor
ICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9mQ3Vz
dG9tKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFy
Z3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdz
IHZhbHVlSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGNvbnN0cnVjdG9yR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8
U2xvd09wZXJhdGlvbiwgMj4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgaGFzSW5zdGFu
Y2VWYWx1ZUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDM+KCk7CiAK
LSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHZhbHVlSlNSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChjb25zdHJ1
Y3RvciwgY29uc3RydWN0b3JHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5z
dGFuY2VWYWx1ZSwgaGFzSW5zdGFuY2VWYWx1ZUpTUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChn
bG9iYWxPYmplY3RHUFIpOworICAgIGNhbGxPcGVyYXRpb24oCisgICAgICAgIG9wZXJhdGlvbklu
c3RhbmNlT2ZDdXN0b20sCisgICAgICAgIGdsb2JhbE9iamVjdEdQUiwgdmFsdWVKU1IsIGNvbnN0
cnVjdG9yR1BSLCBoYXNJbnN0YW5jZVZhbHVlSlNSKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZh
bHVlR1BSLCByZXR1cm5WYWx1ZUpTUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJldHVyblZhbHVlSlNSKTsKK30KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKQEAgLTE1ODgsMTEgKzE2NTgsNyBAQCB2
b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAKLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwg
YXJndW1lbnRHUFIxKTsKLSNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2Nv
cGUsIGFyZ3VtZW50R1BSMSk7Ci0jZW5kaWYKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5
bG9hZChieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwogICAgIGF1dG8gY29uc3RhbnQg
PSBhZGRUb0NvbnN0YW50UG9vbChKSVRDb25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRGVjbCwg
Yml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlLm1fZnVu
Y3Rpb25EZWNsKSkpOwogICAgIGxvYWRDb25zdGFudChjb25zdGFudCwgYXJndW1lbnRHUFIyKTsK
IApAQCAtMTYzNCwxMiArMTcwMCw4IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24o
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7Ci0jZWxzZQotICAg
IGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwotI2VuZGlm
CiAKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBh
cmd1bWVudEdQUjEpOwogICAgIGF1dG8gY29uc3RhbnQgPSBhZGRUb0NvbnN0YW50UG9vbChKSVRD
b25zdGFudFBvb2w6OlR5cGU6OkZ1bmN0aW9uRXhwciwgYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0
aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKSkpOwogICAgIGxvYWRD
b25zdGFudChjb25zdGFudCwgYXJndW1lbnRHUFIyKTsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9
IE9wOjpvcGNvZGVJRDsKQEAgLTE3MDAsMTQgKzE3NjIsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X2FycmF5X3dpdGhfc2l6ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUs
IGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CiAjZWxzZQog
ICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheVdp
dGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIHJlZ1Qy
KTsKLSAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QxLCByZWdUMCk7CiAgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMyk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXpl
QW5kUHJvZmlsZSwgZHN0LCByZWdUMywgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkp
OwogI2VuZGlmCiB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
cm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBtX2lzU2hhcmVhYmxlID0gZmFsc2U7CkBAIC0xNzE3LDU2ICsxNzc3LDU2IEBAIHZvaWQgSklU
OjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90
eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNv
ZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZVRvUHJvZmlsZSwganNSZWdUMTApOwogCiAgICAgSnVtcExpc3QganVtcFRvRW5kOwogCi0gICAg
anVtcFRvRW5kLmFwcGVuZChicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAganVtcFRvRW5kLmFw
cGVuZChicmFuY2hJZkVtcHR5KGpzUmVnVDEwKSk7CiAKICAgICAvLyBDb21waWxlIGluIGEgcHJl
ZGljdGl2ZSB0eXBlIGNoZWNrLCBpZiBwb3NzaWJsZSwgdG8gc2VlIGlmIHdlIGNhbiBza2lwIHdy
aXRpbmcgdG8gdGhlIGxvZy4KICAgICAvLyBUaGVzZSB0eXBlY2hlY2tzIGFyZSBpbmxpbmVkIHRv
IG1hdGNoIHRob3NlIG9mIHRoZSA2NC1iaXQgSlNWYWx1ZSB0eXBlIGNoZWNrcy4KICAgICBpZiAo
Y2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlVW5kZWZpbmVkKQotICAg
ICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmVW5kZWZpbmVkKHJlZ1QwKSk7CisgICAgICAg
IGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZVbmRlZmluZWQoanNSZWdUMTApKTsKICAgICBlbHNl
IGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVOdWxsKQotICAg
ICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmTnVsbChyZWdUMCkpOworICAgICAgICBqdW1w
VG9FbmQuYXBwZW5kKGJyYW5jaElmTnVsbChqc1JlZ1QxMCkpOwogICAgIGVsc2UgaWYgKGNhY2hl
ZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZUJvb2xlYW4pCi0gICAgICAgIGp1
bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZCb29sZWFuKHJlZ1QwLCByZWdUMSkpOworICAgICAgICBq
dW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmQm9vbGVhbihqc1JlZ1QxMCwgcmVnVDIpKTsKICAgICBl
bHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVBbnlJbnQp
Ci0gICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZJbnQzMihyZWdUMCkpOworICAgICAg
ICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmSW50MzIoanNSZWdUMTApKTsKICAgICBlbHNlIGlm
IChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVOdW1iZXIpCi0gICAg
ICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKKyAgICAgICAganVt
cFRvRW5kLmFwcGVuZChicmFuY2hJZk51bWJlcihqc1JlZ1QxMCwgcmVnVDIpKTsKICAgICBlbHNl
IGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVTdHJpbmcpIHsK
LSAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAg
ICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmU3RyaW5nKHJlZ1QwKSk7CisgICAgICAgIEp1bXAg
aXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGpzUmVnVDEwKTsKKyAgICAgICAganVtcFRvRW5k
LmFwcGVuZChicmFuY2hJZlN0cmluZyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCkpKTsKICAgICAgICAg
aXNOb3RDZWxsLmxpbmsodGhpcyk7CiAgICAgfQogCiAgICAgLy8gTG9hZCB0aGUgdHlwZSBwcm9m
aWxpbmcgbG9nIGludG8gVDIuCiAgICAgVHlwZVByb2ZpbGVyTG9nKiBjYWNoZWRUeXBlUHJvZmls
ZXJMb2cgPSBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Y2FjaGVkVHlwZVByb2ZpbGVyTG9nKSwgcmVnVDIpOwotICAgIC8vIExvYWQgdGhlIG5leHQgbG9n
IGVudHJ5IGludG8gVDEuCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBUeXBlUHJvZmlsZXJM
b2c6OmN1cnJlbnRMb2dFbnRyeU9mZnNldCgpKSwgcmVnVDEpOworICAgIC8vIExvYWQgdGhlIG5l
eHQgbG9nIGVudHJ5IGludG8gVDMuCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBUeXBlUHJv
ZmlsZXJMb2c6OmN1cnJlbnRMb2dFbnRyeU9mZnNldCgpKSwgcmVnVDMpOwogCiAgICAgLy8gU3Rv
cmUgdGhlIEpTVmFsdWUgb250byB0aGUgbG9nIGVudHJ5LgotICAgIHN0b3JlNjQocmVnVDAsIEFk
ZHJlc3MocmVnVDEsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnZhbHVlT2Zmc2V0KCkpKTsK
KyAgICBzdG9yZVZhbHVlKGpzUmVnVDEwLCBBZGRyZXNzKHJlZ1QzLCBUeXBlUHJvZmlsZXJMb2c6
OkxvZ0VudHJ5Ojp2YWx1ZU9mZnNldCgpKSk7CiAKLSAgICAvLyBTdG9yZSB0aGUgc3RydWN0dXJl
SUQgb2YgdGhlIGNlbGwgaWYgVDAgaXMgYSBjZWxsLCBvdGhlcndpc2UsIHN0b3JlIDAgb24gdGhl
IGxvZyBlbnRyeS4KLSAgICBKdW1wIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwot
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMCk7Ci0gICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhyZWdUMSwgVHlwZVByb2ZpbGVyTG9n
OjpMb2dFbnRyeTo6c3RydWN0dXJlSURPZmZzZXQoKSkpOworICAgIC8vIFN0b3JlIHRoZSBzdHJ1
Y3R1cmVJRCBvZiB0aGUgY2VsbCBpZiBqc1JlZ1QxMCBpcyBhIGNlbGwsIG90aGVyd2lzZSwgc3Rv
cmUgMCBvbiB0aGUgbG9nIGVudHJ5LgorICAgIEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bChqc1JlZ1QxMCk7CisgICAgbG9hZDMyKEFkZHJlc3MoanNSZWdUMTAucGF5bG9hZEdQUigpLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CisgICAgc3RvcmUzMihyZWdUMCwg
QWRkcmVzcyhyZWdUMywgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6c3RydWN0dXJlSURPZmZz
ZXQoKSkpOwogICAgIEp1bXAgc2tpcElzQ2VsbCA9IGp1bXAoKTsKICAgICBub3RDZWxsLmxpbmso
dGhpcyk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MocmVnVDEsIFR5cGVQ
cm9maWxlckxvZzo6TG9nRW50cnk6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAgICBzdG9yZTMy
KFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhyZWdUMywgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRy
eTo6c3RydWN0dXJlSURPZmZzZXQoKSkpOwogICAgIHNraXBJc0NlbGwubGluayh0aGlzKTsKIAog
ICAgIC8vIFN0b3JlIHRoZSB0eXBlTG9jYXRpb24gb24gdGhlIGxvZyBlbnRyeS4KICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoY2FjaGVkVHlwZUxvY2F0aW9uKSwgcmVnVDApOwotICAgIHN0b3JlNjQo
cmVnVDAsIEFkZHJlc3MocmVnVDEsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OmxvY2F0aW9u
T2Zmc2V0KCkpKTsKKyAgICBzdG9yZVB0cihyZWdUMCwgQWRkcmVzcyhyZWdUMywgVHlwZVByb2Zp
bGVyTG9nOjpMb2dFbnRyeTo6bG9jYXRpb25PZmZzZXQoKSkpOwogCiAgICAgLy8gSW5jcmVtZW50
IHRoZSBjdXJyZW50IGxvZyBlbnRyeS4KLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihU
eXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5KSksIHJlZ1QxKTsKLSAgICBzdG9yZTY0KHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QyLCBUeXBlUHJvZmlsZXJMb2c6OmN1cnJlbnRMb2dFbnRyeU9mZnNldCgpKSk7
Ci0gICAgSnVtcCBza2lwQ2xlYXJMb2cgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QxLCBUcnVz
dGVkSW1tUHRyKGNhY2hlZFR5cGVQcm9maWxlckxvZy0+bG9nRW5kUHRyKCkpKTsKKyAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHNpemVvZihUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5KSksIHJlZ1Qz
KTsKKyAgICBzdG9yZVB0cihyZWdUMywgQWRkcmVzcyhyZWdUMiwgVHlwZVByb2ZpbGVyTG9nOjpj
dXJyZW50TG9nRW50cnlPZmZzZXQoKSkpOworICAgIEp1bXAgc2tpcENsZWFyTG9nID0gYnJhbmNo
UHRyKE5vdEVxdWFsLCByZWdUMywgVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlUHJvZmlsZXJMb2ct
PmxvZ0VuZFB0cigpKSk7CiAgICAgLy8gQ2xlYXIgdGhlIGxvZyBpZiB3ZSdyZSBhdCB0aGUgZW5k
IG9mIHRoZSBsb2cuCiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
UHJvY2Vzc1R5cGVQcm9maWxlckxvZywgJnZtKCkpOwogICAgIHNraXBDbGVhckxvZy5saW5rKHRo
aXMpOwpAQCAtMTc3OCwxMyArMTgzOCwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93
X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdAogewog
ICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKICAgICB1cGRhdGVUb3BD
YWxsRnJhbWUoKTsKLSAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9u
QXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUu
Iik7CisgICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAocmVnVDAsIG5vbkFyZ0dQUjAsIHJlZ1Qy
KSwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuUHJvbG9n
dWU+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1QwOwogICAgIEdQUlJlZyBz
Y3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCBy
ZWdpc3Rlci4KICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKICAgICBlbnN1cmVTaGFk
b3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0
Y2gyUmVnKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJl
Z1QzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChieXRlY29kZS5tX3Njb3Bl
LCByZWdUMyk7CiAgICAgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KHNoYWRvd1BhY2tl
dFJlZywgc2NyYXRjaDFSZWcsIHJlZ1QzKTsKIH0KIApAQCAtMTc5Miw3ICsxODUyLDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0No
aWNrZW4oKSk7CiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7Ci0gICAgc3RhdGljX2Fzc2VydChu
b25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUg
cHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFw
KHJlZ1QwLCBub25BcmdHUFIwLCByZWdUMiksICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhp
cyBpcyB0cnVlLiIpOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKHJlZ1QwLCByZWdUMSwg
anNSZWdUMzIsIHJlZ1Q0KSwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUu
Iik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFk
b3dDaGlja2VuVGFpbD4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7CiAg
ICAgewpAQCAtMTgwMCwxNCArMTg2MSwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93
X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
ICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKICAgICAgICAgZW5zdXJlU2hhZG93Q2hp
Y2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJl
Zyk7CiAgICAgfQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFs
dWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUs
IHJlZ1QzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVl
LCBqc1JlZ1QzMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUu
bV9zY29wZSwgcmVnVDQpOwogICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCByZWdUMSk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93
UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUMSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFk
b3dQYWNrZXRSZWcsIGpzUmVnVDMyLCByZWdUNCwgcmVnVDEsIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZUluZGV4KSk7CiB9CiAKLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQotCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIG1faXNTaGFyZWFibGUgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCBkNDg0MzRjZWZmYTllNTI3
MTc3MjljMzU0NDA3OTU3OGFjZmUxNzgzLi40MmFjMTAzZjNlYzY4NGZiODZhOGUyMWNlMzllNzdh
MWZjNWE0MDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCkBAIC01MCw3MyArNTAsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBKSVQ6
OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMgPSBieXRlY29kZS5tX3NyYzsKLSAgICAKLSAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkK
LSAgICAgICAgZW1pdFN0b3JlKGRzdCwgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykpOwotICAgIGVs
c2UgewotICAgICAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgIGVtaXRT
dG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci0gICAgfQotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9l
bmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBBU1NFUlQo
cmV0dXJuVmFsdWVHUFIgIT0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW5kPigpOwotICAgIGVtaXRMb2FkKGJ5dGVjb2Rl
Lm1fdmFsdWUsIHJlZ1QxLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygpOwotICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Ci0gICAgcmV0KCk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0X29wX2ptcChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm1wPigp
OwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRh
ZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAgIHNpemVfdCBh
bGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+
aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZv
ck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25T
aXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7Ci0KLSAgICBSZWdpc3Rl
cklEIHJlc3VsdFJlZyA9IHJldHVyblZhbHVlR1BSOwotICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9y
UmVnID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDM7Ci0KLSAgICBp
ZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRy
dXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3Vs
dFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRy
dXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMp
OwotICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1
cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwot
ICAgICAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWcpOwotICAgIH0K
LX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0
cnVjdHVyZSk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQog
dm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCk7CkBAIC0xMjQsMTMgKzU3LDE0
IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0
b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0
YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1pdExvYWRQ
YXlsb2FkKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyUGF5bG9hZChoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAgICAgLy8gV2UgZG9uJ3QganVt
cCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgogICAgIEp1bXAg
aGFzSW5zdGFuY2VWYWx1ZU5vdENlbGwgPSBlbWl0SnVtcElmTm90SlNDZWxsKGhhc0luc3RhbmNl
VmFsdWUpOwotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUg
PSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VU
T0YoSlNHbG9iYWxPYmplY3QsIG1fZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rp
b24pKSk7CiAKICAgICAvLyBXZSBrbm93IHRoYXQgY29uc3RydWN0b3IgaXMgYW4gb2JqZWN0IGZy
b20gdGhlIHdheSBieXRlY29kZSBpcyBlbWl0dGVkIGZvciBpbnN0YW5jZW9mIGV4cHJlc3Npb25z
LgotICAgIGVtaXRMb2FkUGF5bG9hZChjb25zdHJ1Y3RvciwgcmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGNvbnN0cnVjdG9yLCByZWdUMCk7CiAKICAgICAvLyBDaGVj
ayB0aGF0IGNvbnN0cnVjdG9yICdJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlJyBpLmUuIHRo
ZSBvYmplY3QgaXMgbm90IGEgQy1BUEkgdXNlciBub3IgYSBib3VuZCBmdW5jdGlvbi4KICAgICB0
ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVnVDApOwpAQCAt
MTU5LDggKzkzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIHVzaW5nIEJhc2VsaW5lSW5zdGFuY2VvZlJl
Z2lzdGVyczo6c2NyYXRjaDFHUFI7CiAgICAgdXNpbmcgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0
ZXJzOjpzY3JhdGNoMkdQUjsKIAotICAgIGVtaXRMb2FkUGF5bG9hZCh2YWx1ZSwgdmFsdWVKU1Iu
cGF5bG9hZEdQUigpKTsKLSAgICBlbWl0TG9hZFBheWxvYWQocHJvdG8sIHByb3RvSlNSLnBheWxv
YWRHUFIoKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQodmFsdWUsIHZhbHVl
SlNSLnBheWxvYWRHUFIoKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQocHJv
dG8sIHByb3RvSlNSLnBheWxvYWRHUFIoKSk7CiAKICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFy
ZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUg
Z2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHZhbHVlKTsKQEAgLTE4OCwxMiArMTIyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVt
aXRTdG9yZUJvb2woZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9pbnN0
YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCi17Ci0gICAgLy8gVGhpcyBhbHdheXMg
Z29lcyB0byBzbG93IHBhdGggc2luY2Ugd2UgZXhwZWN0IGl0IHRvIGJlIHJhcmUuCi0gICAgYWRk
U2xvd0Nhc2UoanVtcCgpKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2Yo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpAQCAt
MjE0LDE1ICsxNDIsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICB1c2luZyBCYXNl
bGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvSlNSOwogICAgIHN0YXRpY19hc3NlcnQodmFs
dWVKU1IgPT0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMj4oKSk7CiAgICAg
Ly8gUHJvdG8gd2lsbCBiZSBwYXNzZWQgb24gc3RhY2ssIGp1c3QgbWFrZSBzdXJlIG5vIG92ZXJs
YXAKLSAgICBzdGF0aWNfYXNzZXJ0KCFwcm90b0pTUi51c2VzKGdsb2JhbE9iamVjdEdQUikpOwot
ICAgIHN0YXRpY19hc3NlcnQoIXByb3RvSlNSLnVzZXMoc3R1YkluZm9HUFIpKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KCF2YWx1ZUpTUi51c2VzKGdsb2JhbE9iamVjdEdQUikpOwotICAgIHN0YXRpY19h
c3NlcnQoIXZhbHVlSlNSLnVzZXMoc3R1YkluZm9HUFIpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG5v
T3ZlcmxhcCh2YWx1ZUpTUiwgcHJvdG9KU1IsIGdsb2JhbE9iamVjdEdQUiwgc3R1YkluZm9HUFIp
KTsKIAogICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKICAgICBsb2FkQ29u
c3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsK
LSAgICBlbWl0TG9hZFRhZyh2YWx1ZSwgdmFsdWVKU1IudGFnR1BSKCkpOwotICAgIGVtaXRMb2Fk
VGFnKHByb3RvLCBwcm90b0pTUi50YWdHUFIoKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
clRhZyh2YWx1ZSwgdmFsdWVKU1IudGFnR1BSKCkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJUYWcocHJvdG8sIHByb3RvSlNSLnRhZ0dQUigpKTsKICAgICBjYWxsT3BlcmF0aW9uPFNsb3dP
cGVyYXRpb24+KAogICAgICAgICBBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLAogICAgICAgICBkc3QsCkBAIC0yMzAsODMgKzE1
NSwyNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9y
OwotICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJ
bnN0YW5jZVZhbHVlOwotCi0gICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAg
ZW1pdExvYWRQYXlsb2FkKGNvbnN0cnVjdG9yLCByZWdUMik7Ci0gICAgZW1pdExvYWQoaGFzSW5z
dGFuY2VWYWx1ZSwgcmVnVDQsIHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbklu
c3RhbmNlT2ZDdXN0b20sIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSk7
Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLSAgICAKIHZvaWQg
SklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Vt
cHR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgCi0gICAgZW1p
dExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZyksIHJlZ1QwKTsKIAogICAgIGVtaXRTdG9yZUJv
b2woZHN0LCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmlu
ZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZpbmVkPigpOwot
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdExvYWQodmFs
dWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDEp
OwotCi0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgCi0gICAg
aXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBi
cmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92
ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBqdW1wKCk7Ci0gICAgCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwg
U3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBjb21wYXJlMzIo
RXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOwotCi0gICAgbm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5saW5rKHRoaXMpOwotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0U3RvcmVCb29s
KGRzdCwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWRPck51bGw+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVtaXRMb2FkVGFnKHZhbHVl
LCByZWdUMCk7Ci0gICAgc3RhdGljX2Fzc2VydCgoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnICsgMSA9
PSBKU1ZhbHVlOjpOdWxsVGFnKSAmJiAoSlNWYWx1ZTo6TnVsbFRhZyAmIDB4MSksICIiKTsKLSAg
ICBvcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSwgcmVnVDApOwotICAgIGVtaXRTdG9y
ZUJvb2woZHN0LCByZWdUMCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAotICAgIGVtaXRMb2FkVGFnKHZhbHVlLCByZWdUMCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyh2YWx1ZSwgcmVnVDApOwogICAgIGNvbXBh
cmUzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgcmVn
VDApOwogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7CiB9CkBAIC0zMTcsNyArMTg0LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKLSAg
ICBlbWl0TG9hZFRhZyh2YWx1ZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJU
YWcodmFsdWUsIHJlZ1QwKTsKICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKICAg
ICBjb21wYXJlMzIoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFn
ICsgMSksIHJlZ1QwKTsKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwpAQCAtMzM2LDcg
KzIwMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGludCB0eXBlID0gYnl0ZWNvZGUubV90eXBlOwogCi0g
ICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElm
Tm90Q2VsbChyZWdUMSk7CiAKICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOwpA
QCAtMzU1LDcgKzIyMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29w
ZXJhbmQ7CiAKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSwgcmVnVDApOwogICAgIEp1bXAgaXNOb3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKIAogICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihPYmplY3RUeXBlKSwgcmVnVDApOwpAQCAtMzc0LDcgKzI0MSw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCBy
ZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QxLCByZWdUMCk7CiAK
ICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk9iamVjdChyZWdUMCkpOwpAQCAtMzkwLDcgKzI1Nyw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0TG9hZChzcmMsIHJl
Z1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QxLCByZWdU
MCk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKICAgICBKdW1w
IGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7CkBAIC00MDEsMTE5ICsyNjgsMjggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CiAK
LXZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGZ1bmMg
PSBieXRlY29kZS5tX2Z1bmN0aW9uOwotICAgIFZpcnR1YWxSZWdpc3RlciBuYW1lID0gYnl0ZWNv
ZGUubV9uYW1lOwotICAgIGVtaXRMb2FkUGF5bG9hZChmdW5jLCByZWdUMSk7Ci0gICAgZW1pdExv
YWQobmFtZSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1
bmN0aW9uTmFtZSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0TG9hZFRhZyhzcmMsIHJlZ1QwKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyVGFnKHNyYywgcmVnVDApOwogCi0gICAgZW1pdExvYWQoc3JjLCByZWdU
MSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMSwgcmVnVDAp
OwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Qm9vbGVhbihyZWdUMSwgSW52YWxpZEdQUlJl
ZykpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwogCiAgICAgZW1pdFN0b3Jl
Qm9vbChkc3QsIHJlZ1QwLCAoZHN0ID09IHNyYykpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9q
ZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpmYWxzZT4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgY29uZCA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOwotICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKLQotICAgIGVtaXRMb2FkKGNvbmQsIHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBKU1ZhbHVl
UmVncyB2YWx1ZShyZWdUMSwgcmVnVDApOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwot
ICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCks
IHZhbHVlLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGNvbmQgPSBi
eXRlY29kZS5tX2NvbmRpdGlvbjsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0KLSAgICBlbWl0TG9h
ZChjb25kLCByZWdUMSwgcmVnVDApOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZShyZWdUMSwgcmVnVDApOwot
ICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1Qz
OwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3Jh
dGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
ZXFOdWxsPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwot
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKLQotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsK
LQotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwotCi0gICAg
SnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1
bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxP
YmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7Ci0KLSAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlh
dGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsK
LSAgICBzdGF0aWNfYXNzZXJ0KChKU1ZhbHVlOjpVbmRlZmluZWRUYWcgKyAxID09IEpTVmFsdWU6
Ok51bGxUYWcpICYmIChKU1ZhbHVlOjpOdWxsVGFnICYgMHgxKSwgIiIpOwotICAgIG9yMzIoVHJ1
c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZk51bGwocmVnVDEpLCB0
YXJnZXQpOwotCi0gICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0g
ICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
bmVxTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsK
LSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0KLSAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7
Ci0KLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKLQotICAg
IGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0
YXJnZXQpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RF
cXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJl
Z1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAg
IC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAg
ICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotCi0gICAgc3RhdGljX2Fzc2VydCgoSlNWYWx1ZTo6
VW5kZWZpbmVkVGFnICsgMSA9PSBKU1ZhbHVlOjpOdWxsVGFnKSAmJiAoSlNWYWx1ZTo6TnVsbFRh
ZyAmIDB4MSksICIiKTsKLSAgICBvcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgIGFk
ZEp1bXAoYnJhbmNoSWZOb3ROdWxsKHJlZ1QxKSwgdGFyZ2V0KTsKLQotICAgIHdhc05vdEltbWVk
aWF0ZS5saW5rKHRoaXMpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp1bmRlZmluZWRPck51bGw+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAKLSAgICBlbWl0TG9hZFRhZyh2YWx1ZSwgcmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIHJlZ1QwKTsKICAgICBzdGF0aWNfYXNzZXJ0KChKU1Zh
bHVlOjpVbmRlZmluZWRUYWcgKyAxID09IEpTVmFsdWU6Ok51bGxUYWcpICYmIChKU1ZhbHVlOjpO
dWxsVGFnICYgMHgxKSwgIiIpOwogICAgIG9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CiAg
ICAgYWRkSnVtcChicmFuY2hJZk51bGwocmVnVDApLCB0YXJnZXQpOwpAQCAtNTI1LDcgKzMwMSw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRMb2FkVGFnKHZh
bHVlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyh2YWx1ZSwgcmVnVDAp
OwogICAgIHN0YXRpY19hc3NlcnQoKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyArIDEgPT0gSlNWYWx1
ZTo6TnVsbFRhZykgJiYgKEpTVmFsdWU6Ok51bGxUYWcgJiAweDEpLCAiIik7CiAgICAgb3IzMihU
cnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaElmTm90TnVsbChyZWdU
MCksIHRhcmdldCk7CkBAIC01MzUsMTMgKzMxMSwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFf
cHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXFQdHI+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9p
bnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKLSAg
ICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsK
IAotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywgcmVnVDEsIHJlZ1QwKTsKICAgICBKdW1wIG5vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwocmVnVDEpOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpLCB0YXJnZXQpOworICAgIGxvYWRDb2Rl
QmxvY2tDb25zdGFudFBheWxvYWQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDIpOwor
ICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIpLCB0YXJnZXQpOwogICAg
IG5vdENlbGwubGluayh0aGlzKTsKIH0KIApAQCAtNTQ5LDEzICszMjQsMTIgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgSlNW
YWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNp
YWxQb2ludGVyKTsKLSAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDEsIHJlZ1QwKTsKICAgICBKdW1wIG5vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwotICAgIEp1bXAgZXF1YWwgPSBicmFuY2hQdHIo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7Cisg
ICAgbG9hZENvZGVCbG9ja0NvbnN0YW50UGF5bG9hZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVy
LCByZWdUMik7CisgICAgSnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1Qy
KTsKICAgICBub3RDZWxsLmxpbmsodGhpcyk7CiAgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVk
SW1tMzIoMSksIGJ5dGVjb2RlLCBPcEpuZXFQdHI6Ok1ldGFkYXRhOjpvZmZzZXRPZkhhc0p1bXBl
ZCgpKTsKICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKQEAgLTU3MCw3ICszNDQsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRMb2FkMihzcmMxLCBy
ZWdUMSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmMxLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
MiwgcmVnVDMsIHJlZ1QyKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDEsIHJlZ1QzKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QxKSk7CiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
TG93ZXN0VGFnKSkpOwpAQCAtNTk1LDEzICszNzAsMTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUUKICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDIpKTsKIAog
ICAgIC8vIFN0cmluZyBjYXNlLgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmluZ0VxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1Qy
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVTdHJpbmdFcSwgcmVnVDEsIHJlZ1QwLCByZWdUMik7CiAgICAgc3RvcmVSZXN1
bHQuYXBwZW5kKGp1bXAoKSk7CiAKICAgICAvLyBHZW5lcmljIGNhc2UuCiAgICAgZ2VuZXJpY0Nh
c2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gZG91YmxlcwogICAgIGdlbmVyaWNDYXNl
LmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIG1fcHJv
ZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDQsIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogCiAgICAgc3Rv
cmVSZXN1bHQubGluayh0aGlzKTsKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmV0dXJuVmFsdWVH
UFIpOwpAQCAtNjE0LDcgKzM5MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0g
Ynl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3Jo
czsKIAotICAgIGVtaXRMb2FkMihzcmMxLCByZWdUMSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCByZWdU
Mik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMSwgcmVnVDApOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7CiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZDZWxsKHJlZ1QxKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQmVsb3csIHJl
Z1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwpAQCAtNjM0LDE0ICs0MTIs
MTYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlciwgQ29tcGlsZU9wRXEKICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJh
bmNoSWZOb3RTdHJpbmcocmVnVDIpKTsKIAogICAgIC8vIFN0cmluZyBjYXNlLgotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qx
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgcmVnVDEsIHJl
Z1QwLCByZWdUMik7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKHR5cGUgPT0g
Q29tcGlsZU9wRXFUeXBlOjpFcSA/IE5vblplcm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQUiksIGp1
bXBUYXJnZXQpOwogICAgIGRvbmUuYXBwZW5kKGp1bXAoKSk7CiAKICAgICAvLyBHZW5lcmljIGNh
c2UuCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gZG91Ymxl
cwogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlRXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVF
cSwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMih0eXBlID09IENvbXBp
bGVPcEVxVHlwZTo6RXEgPyBOb25aZXJvIDogWmVybywgcmV0dXJuVmFsdWVHUFIpLCBqdW1wVGFy
Z2V0KTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKQEAgLTY2MSw3ICs0NDEsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0TG9hZDIoc3JjMSwgcmVnVDEs
IHJlZ1QwLCBzcmMyLCByZWdUMywgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjMSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIHJl
Z1QzLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBy
ZWdUMykpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMSkpOwogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKEJlbG93LCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2Vz
dFRhZykpKTsKQEAgLTY4NiwxMyArNDY3LDE1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlCiAg
ICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QyKSk7CiAKICAgICAv
LyBTdHJpbmcgY2FzZS4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdF
cSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QwLCByZWdUMik7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlU3RyaW5nRXEsIHJlZ1QxLCByZWdUMCwgcmVnVDIpOwogICAgIHN0b3JlUmVzdWx0LmFw
cGVuZChqdW1wKCkpOwogCiAgICAgLy8gR2VuZXJpYyBjYXNlLgogICAgIGdlbmVyaWNDYXNlLmFw
cGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMKICAgICBnZW5lcmljQ2FzZS5saW5r
KHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX3Byb2ZpbGVk
Q29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1Q0LCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKIAogICAgIHN0b3JlUmVz
dWx0LmxpbmsodGhpcyk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJldHVyblZhbHVl
R1BSKTsKQEAgLTcwNiw3ICs0ODksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEg
PSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1f
cmhzOwogCi0gICAgZW1pdExvYWQyKHNyYzEsIHJlZ1QxLCByZWdUMCwgc3JjMiwgcmVnVDMsIHJl
Z1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QxLCByZWdUMCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCByZWdUMywgcmVnVDIpOwogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkNlbGwocmVnVDEpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywg
cmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CkBAIC03MjksNyArNTEz
LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xo
czsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1p
dExvYWQyKHNyYzEsIHJlZ1QxLCByZWdUMCwgc3JjMiwgcmVnVDMsIHJlZ1QyKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMyLCByZWdUMywgcmVnVDIpOwogCiAgICAgLy8gQmFpbCBpZiB0aGUgdGFn
cyBkaWZmZXIsIG9yIGFyZSBkb3VibGUuCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QxLCByZWdUMykpOwpAQCAtNzY5LDExICs1NTQsMTIgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRMb2FkMihzcmMxLCByZWdU
MSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMxLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwg
cmVnVDMsIHJlZ1QyKTsKIAogICAgIC8vIEJhaWwgaWYgdGhlIHRhZ3MgZGlmZmVyLCBvciBhcmUg
ZG91YmxlLgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMp
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywgcmVnVDEsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQmVsb3csIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwogCiAgICAgLy8gSnVtcCB0
byBhIHNsb3cgY2FzZSBpZiBib3RoIGFyZSBzdHJpbmdzIG9yIHN5bWJvbHMgKG5vbiBvYmplY3Qp
LgogICAgIEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7CkBAIC04MDUsNyAr
NTkxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9wcm9maWxl
ZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUNCwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKIH0KIApAQCAtODE1LDkxICs2MDIsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pu
c3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3Rl
cT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlU3RyaWN0RXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVTdHJpY3RFcSwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxX251
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsK
LSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKLQotICAgIEp1
bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMSk7
Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAp
OwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDEp
OwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgaXNJbW1lZGlhdGUu
bGluayh0aGlzKTsKLQotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpOdWxsVGFnKSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMSk7Ci0gICAgb3IzMihyZWdU
MiwgcmVnVDEpOwotCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotCi0gICAgZW1pdFN0b3JlQm9vbChk
c3QsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29w
ZXJhbmQ7Ci0KLSAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0lt
bWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7Ci0KLSAgICBKdW1wIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgIEp1bXAgd2Fz
Tm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7
Ci0gICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBKdW1w
IHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7
Ci0KLSAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
TnVsbFRhZyksIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDEpOwotICAgIGFuZDMyKHJlZ1QyLCBy
ZWdUMSk7Ci0KLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0KLSAgICBlbWl0U3RvcmVCb29sKGRzdCwg
cmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wVGhyb3c+KCk7Ci0gICAgQVNTRVJUKHJlZ1QwID09IHJldHVyblZhbHVlR1BS
KTsKLSAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgp
LnRvcEVudHJ5RnJhbWUpOwotICAgIGVtaXRMb2FkKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QxLCBy
ZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3cs
IG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApKTsKLSAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwotfQotCiB2b2lkIEpJ
VDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVt
YmVyPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdExvYWQo
c3JjLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdU
MSwgcmVnVDApOwogCiAgICAgSnVtcCBpc0ludDMyID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKQEAgLTkxNyw3ICs2MzEsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF90b19udW1lcmljKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBKU1ZhbHVl
UmVncyBhcmd1bWVudFZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogCi0gICAgZW1pdExvYWQoc3Jj
LCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMSwg
cmVnVDApOwogCiAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkpOwpAQCAtOTM4LDcg
KzY1Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0g
ICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjLCByZWdUMSwgcmVnVDApOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxs
KHJlZ1QxKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKQEAg
LTk1Myw3ICs2NjcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKIAotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYywgcmVnVDEsIHJlZ1QwKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChyZWdUMSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1Qw
KSk7CkBAIC0xMDI1LDc0ICs3MzksMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAg
ZW1pdExvYWRQYXlsb2FkKGN1cnJlbnRTY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJQYXlsb2FkKGN1cnJlbnRTY29wZSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CiAgICAgZW1pdFN0b3Jl
Q2VsbChieXRlY29kZS5tX2RzdCwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9zd2l0
Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hJbW0+KCk7Ci0gICAg
c2l6ZV90IHRhYmxlSW5kZXggPSBieXRlY29kZS5tX3RhYmxlSW5kZXg7Ci0gICAgdW5zaWduZWQg
ZGVmYXVsdE9mZnNldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X2RlZmF1bHRPZmZzZXQpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29k
ZS5tX3NjcnV0aW5lZTsKLQotICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVz
dGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5r
ZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT51
bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwotICAgIG1fc3dp
dGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRl
ZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7Ci0gICAgbGlua2VkVGFibGUu
ZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7Ci0KLSAgICBlbWl0TG9hZChzY3J1dGluZWUs
IHJlZ1QxLCByZWdUMCk7Ci0gICAgYXV0byBub3RJbnQzMiA9IGJyYW5jaElmTm90SW50MzIocmVn
VDEpOwotICAgIHN1YjMyKEltbTMyKHVubGlua2VkVGFibGUubV9taW4pLCByZWdUMCk7Ci0KLSAg
ICBhZGRKdW1wKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDAsIEltbTMyKGxpbmtlZFRhYmxl
Lm1fY3RpT2Zmc2V0cy5zaXplKCkpKSwgZGVmYXVsdE9mZnNldCk7Ci0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5kYXRhKCkpLCByZWdUMSk7Ci0gICAgbG9h
ZFB0cihCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBTY2FsZVB0ciksIHJlZ1QxKTsKLSAgICBmYXJK
dW1wKHJlZ1QxLCBOb1B0clRhZyk7Ci0KLSAgICBub3RJbnQzMi5saW5rKHRoaXMpOwotICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3du
S2V5VHlwZSwgJnZtKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgsIHVu
bGlua2VkVGFibGUubV9taW4pOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFn
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFN3aXRjaENoYXI+KCk7Ci0gICAgc2l6ZV90IHRhYmxlSW5kZXggPSBieXRl
Y29kZS5tX3RhYmxlSW5kZXg7Ci0gICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpOwotICAgIFZp
cnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKLQotICAgIC8v
IGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3
aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlu
a2VkVGFibGUgPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hK
dW1wVGFibGVzW3RhYmxlSW5kZXhdOwotICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29y
ZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29y
ZDo6Q2hhcmFjdGVyKSk7Ci0gICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRU
YWJsZSk7Ci0KLSAgICBlbWl0TG9hZChzY3J1dGluZWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
dGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1
ZUdQUiwgTm9QdHJUYWcpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hTdHJpbmc+KCk7Ci0gICAgc2l6ZV90
IHRhYmxlSW5kZXggPSBieXRlY29kZS5tX3RhYmxlSW5kZXg7Ci0gICAgdW5zaWduZWQgZGVmYXVs
dE9mZnNldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX2RlZmF1
bHRPZmZzZXQpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3Nj
cnV0aW5lZTsKLQotICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRp
b25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTdHJp
bmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT51bmxpbmtl
ZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdKdW1wVGFibGUm
IGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwotICAg
IG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5k
ZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7Ci0gICAgbGlua2VkVGFi
bGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7Ci0KLSAgICBlbWl0TG9hZChzY3J1dGlu
ZWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJp
bmdXaXRoVW5rbm93bktleVR5cGUsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJsZUluZGV4KTsKLSAgICBmYXJKdW1wKHJl
dHVyblZhbHVlR1BSLCBOb1B0clRhZyk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgZW1pdEVudGVyT3B0
aW1pemF0aW9uQ2hlY2soKTsKQEAgLTExMDAsNyArNzUxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAvLyBFdmVu
IHRob3VnaCBKSVQgY29kZSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25z
dGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVu
bmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVh
c2luZyBHQyBwcmVzc3VyZS4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBDb2RlQmxvY2s6OmxsaW50
QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaSA8IG1fcHJvZmls
ZWRDb2RlQmxvY2stPm51bVZhcnMoKTsgKytpKQorICAgIHNpemVfdCBjb3VudCA9IG1fdW5saW5r
ZWRDb2RlQmxvY2stPm51bVZhcnMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gQ29kZUJsb2NrOjps
bGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGkgPCBjb3Vu
dDsgKytpKQogICAgICAgICBlbWl0U3RvcmUodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksIGpz
VW5kZWZpbmVkKCkpOwogCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnRlcik7CkBAIC0xMTE2LDE2NCArNzY4LDEz
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CiB9CiAKLXZvaWQg
SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BD
cmVhdGVUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZENvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9IGJ5dGVjb2Rl
Lm1fY2FsbGVlOwotICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24g
PSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7Ci0gICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSBy
ZWdUMDsKLSAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7Ci0gICAgUmVnaXN0ZXJJ
RCByZXN1bHRSZWcgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1Qx
OwotICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDI7Ci0gICAgUmVnaXN0ZXJJRCBj
YWNoZWRGdW5jdGlvblJlZyA9IHJlZ1Q0OwotICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJl
Z1QzOwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGNhbGxlZSwgY2FsbGVlUmVnKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxlZVJlZykpOwotICAgIGxvYWRQdHIoQWRk
cmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEo
KSksIHJhcmVEYXRhUmVnKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJh
cmVEYXRhUmVnLCBUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKSk7Ci0gICAg
bG9hZDMyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3Rv
dHlwZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgYWxs
b2NhdG9yUmVnKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFy
ZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRp
b25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSAtIEpTRnVuY3Rpb246
OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJlUmVnKTsKLQotICAgIGxvYWRQdHIoY2FjaGVkRnVuY3Rp
b24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsKLSAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMg
PSBicmFuY2hQdHIoRXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2Vs
bDo6c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
UHRyKE5vdEVxdWFsLCBjYWxsZWVSZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7Ci0gICAgaGFzU2Vl
bk11bHRpcGxlQ2FsbGVlcy5saW5rKHRoaXMpOwotCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwot
ICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAgICBlbWl0QWxs
b2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxsb2Nh
dG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsK
LSAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0
eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7Ci0gICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdl
KHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAg
ICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWcpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Ci17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+
KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29k
ZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAmbWV0YWRhdGEu
bV9jYWNoZWRTdHJ1Y3R1cmVJRDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyID0g
Ynl0ZWNvZGUubV9zcmNEc3Q7Ci0KLSAgICBlbWl0TG9hZCh0aGlzUmVnaXN0ZXIsIHJlZ1QzLCBy
ZWdUMik7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDMpKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDIsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDApOwotICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyKSk7Ci19Ci0KIHZvaWQgSklUOjpl
bWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tUZHo+
KCk7Ci0gICAgZW1pdExvYWRUYWcoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIsIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKGJ5dGVjb2RlLm1fdGFyZ2V0Vmly
dHVhbFJlZ2lzdGVyLCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdU
MCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7Ci0gICAgVHlwZUxvY2F0aW9uKiBj
YWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3Rl
cjsKLQotICAgIC8vIExvYWQgcGF5bG9hZCBpbiBUMC4gTG9hZCB0YWcgaW4gVDMuCi0gICAgZW1p
dExvYWRQYXlsb2FkKHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7Ci0gICAgZW1pdExvYWRUYWcodmFs
dWVUb1Byb2ZpbGUsIHJlZ1QzKTsKLQotICAgIEp1bXBMaXN0IGp1bXBUb0VuZDsKLQotICAgIGp1
bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMykpOwotCi0gICAgLy8gQ29tcGlsZSBp
biBhIHByZWRpY3RpdmUgdHlwZSBjaGVjaywgaWYgcG9zc2libGUsIHRvIHNlZSBpZiB3ZSBjYW4g
c2tpcCB3cml0aW5nIHRvIHRoZSBsb2cuCi0gICAgLy8gVGhlc2UgdHlwZWNoZWNrcyBhcmUgaW5s
aW5lZCB0byBtYXRjaCB0aG9zZSBvZiB0aGUgMzItYml0IEpTVmFsdWUgdHlwZSBjaGVja3MuCi0g
ICAgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZVVuZGVmaW5l
ZCkKLSAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZlVuZGVmaW5lZChyZWdUMykpOwot
ICAgIGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZU51
bGwpCi0gICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZOdWxsKHJlZ1QzKSk7Ci0gICAg
ZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlQm9vbGVh
bikKLSAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZkJvb2xlYW4ocmVnVDMsIEludmFs
aWRHUFJSZWcpKTsKLSAgICBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5U
eXBlID09IFR5cGVBbnlJbnQpCi0gICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZJbnQz
MihyZWdUMykpOwotICAgIGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5
cGUgPT0gVHlwZU51bWJlcikgewotICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmTnVt
YmVyKEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMCksIHJlZ1QxKSk7Ci0gICAgfSBlbHNlIGlmIChj
YWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVTdHJpbmcpIHsKLSAgICAg
ICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDMpOwotICAgICAgICBqdW1w
VG9FbmQuYXBwZW5kKGJyYW5jaElmU3RyaW5nKHJlZ1QwKSk7Ci0gICAgICAgIGlzTm90Q2VsbC5s
aW5rKHRoaXMpOwotICAgIH0KLQotICAgIC8vIExvYWQgdGhlIHR5cGUgcHJvZmlsaW5nIGxvZyBp
bnRvIFQyLgotICAgIFR5cGVQcm9maWxlckxvZyogY2FjaGVkVHlwZVByb2ZpbGVyTG9nID0gbV92
bS0+dHlwZVByb2ZpbGVyTG9nKCk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVQ
cm9maWxlckxvZyksIHJlZ1QyKTsKLQotICAgIC8vIExvYWQgdGhlIG5leHQgbG9nIGVudHJ5IGlu
dG8gVDEuCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBUeXBlUHJvZmlsZXJMb2c6OmN1cnJl
bnRMb2dFbnRyeU9mZnNldCgpKSwgcmVnVDEpOwotCi0gICAgLy8gU3RvcmUgdGhlIEpTVmFsdWUg
b250byB0aGUgbG9nIGVudHJ5LgotICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDEsIFR5
cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnZhbHVlT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKLSAgICBzdG9yZTMyKHJlZ1QzLCBBZGRyZXNz
KHJlZ1QxLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojp2YWx1ZU9mZnNldCgpICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLQotICAgIC8vIFN0b3JlIHRoZSBz
dHJ1Y3R1cmVJRCBvZiB0aGUgY2VsbCBpZiBhcmd1bWVudCBpcyBhIGNlbGwsIG90aGVyd2lzZSwg
c3RvcmUgMCBvbiB0aGUgbG9nIGVudHJ5LgotICAgIEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMyk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBU
eXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7Ci0gICAgSnVt
cCBza2lwTm90Q2VsbCA9IGp1bXAoKTsKLSAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgc3Rv
cmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MocmVnVDEsIFR5cGVQcm9maWxlckxvZzo6TG9n
RW50cnk6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKLSAgICBza2lwTm90Q2VsbC5saW5rKHRoaXMp
OwotCi0gICAgLy8gU3RvcmUgdGhlIHR5cGVMb2NhdGlvbiBvbiB0aGUgbG9nIGVudHJ5LgotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlTG9jYXRpb24pLCByZWdUMCk7Ci0gICAgc3Rv
cmUzMihyZWdUMCwgQWRkcmVzcyhyZWdUMSwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6bG9j
YXRpb25PZmZzZXQoKSkpOwotCi0gICAgLy8gSW5jcmVtZW50IHRoZSBjdXJyZW50IGxvZyBlbnRy
eS4KLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihUeXBlUHJvZmlsZXJMb2c6OkxvZ0Vu
dHJ5KSksIHJlZ1QxKTsKLSAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBUeXBlUHJv
ZmlsZXJMb2c6OmN1cnJlbnRMb2dFbnRyeU9mZnNldCgpKSk7Ci0gICAganVtcFRvRW5kLmFwcGVu
ZChicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVQcm9m
aWxlckxvZy0+bG9nRW5kUHRyKCkpKSk7Ci0gICAgLy8gQ2xlYXIgdGhlIGxvZyBpZiB3ZSdyZSBh
dCB0aGUgZW5kIG9mIHRoZSBsb2cuCi0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uUHJvY2Vzc1R5cGVQcm9maWxlckxvZywgJnZtKCkpOwotCi0gICAganVtcFRvRW5k
LmxpbmsodGhpcyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9w
cm9sb2d1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIFJF
TEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKLSAgICB1cGRhdGVUb3BDYWxsRnJh
bWUoKTsKLSAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BS
MCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7Ci0g
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlj
a2VuUHJvbG9ndWU+KCk7Ci0gICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1QwOwotICAg
IEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1h
cmd1bWVudCByZWdpc3Rlci4KLSAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKLSAgICBl
bnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFS
ZWcsIHNjcmF0Y2gyUmVnKTsKLQotICAgIHNjcmF0Y2gxUmVnID0gcmVnVDQ7Ci0gICAgZW1pdExv
YWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlja2Vu
UHJvbG9ndWVQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgcmVnVDMpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hh
ZG93Q2hpY2tlbigpKTsKLSAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKLSAgICBzdGF0aWNfYXNz
ZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwg
aGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKLSAgICBHUFJS
ZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9u
QXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgotICAgIEdQ
UlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQo
dm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwotICAgIGVt
aXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDIpOwotICAgIGVtaXRMb2Fk
VGFnKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgdGhpc1Jl
Z3MocmVnVDEsIHJlZ1QyKTsKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwg
cmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywg
dGhpc1JlZ3MsIHJlZ1QzLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2spLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
I2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IDk1NzY5NWIzMGU5Mzk5YmJhMGUzMGYyZWZm
NDkwZDMwZmI2N2NiNWYuLjMxYmU4YjY5MGYyNTE5YjkzNDdiYzNjMDdiZmRiOTBlYjVhODhjZGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
CkBAIC03NzUsMTQgKzc3NSwxMiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsRwogfQogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLQogdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0R2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5
dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNz
b3IsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChieXRlY29kZS5t
X2FjY2Vzc29yLCByZWdUMSk7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5r
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRp
b25zLCByZWdUMSk7CiB9CkBAIC03OTAsOSArNzg4LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2dldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0U2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5
dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNz
b3IsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChieXRlY29kZS5t
X2FjY2Vzc29yLCByZWdUMSk7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAsIG1fdW5saW5r
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRp
b25zLCByZWdUMSk7CiB9CkBAIC04MDAsMTAgKzc5OCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyU2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3QgYXR0cmli
dXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxv
YWQoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
UGF5bG9hZChieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwogICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDMpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCByZWdU
MywgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CiB9CkBAIC04MTEsMjYgKzgw
OSw0MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dl
dHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5VmFs
PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7
CisKKyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uUHV0R2V0dGVy
QnlWYWwpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1JQID0gcHJlZmVycmVk
QXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4oKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJh
c2VHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAxPigpOworICAgIGNv
bnN0ZXhwciBKU1ZhbHVlUmVncyBwcm9wZXJ0eUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNs
b3dPcGVyYXRpb24sIDI+KCk7CisgICAgLy8gQXR0cmlidXRlcyBpbiBhcmd1bWVudCAzCisgICAg
Y29uc3RleHByIEdQUlJlZyBzZXR0ZXJHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3Bl
cmF0aW9uLCA0PigpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNv
ZGUubV9iYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fcHJvcGVydHksIHByb3BlcnR5SlNSKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRl
Y29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2FjY2Vzc29yLCByZWdUMik7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwg
YXR0cmlidXRlcywgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5
dGVjb2RlLm1fYWNjZXNzb3IsIHNldHRlckdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9i
YWxPYmplY3RHUlApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWws
IGdsb2JhbE9iamVjdEdSUCwgYmFzZUdQUiwgcHJvcGVydHlKU1IsIGF0dHJpYnV0ZXMsIHNldHRl
ckdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwotICAgIGludDMyX3QgYXR0cmli
dXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qz
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCByZWdUMywgcmVn
VDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7Ci19CiAKLSNlbmRpZgorICAgIHVzaW5nIFNs
b3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCk7CisgICAgY29u
c3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUlAgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93
T3BlcmF0aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHByZWZlcnJl
ZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVS
ZWdzIHByb3BlcnR5SlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMj4o
KTsKKyAgICAvLyBBdHRyaWJ1dGVzIGluIGFyZ3VtZW50IDMKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHNldHRlckdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDQ+KCk7CisK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChieXRlY29kZS5tX2Jhc2UsIGJhc2VH
UFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcHJv
cGVydHlKU1IpOworICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRl
czsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChieXRlY29kZS5tX2FjY2Vzc29y
LCBzZXR0ZXJHUFIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1JQKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBnbG9iYWxPYmplY3RHUlAs
IGJhc2VHUFIsIHByb3BlcnR5SlNSLCBhdHRyaWJ1dGVzLCBzZXR0ZXJHUFIpOworfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKQEAgLTE5NTgsMTMwICsxOTcwLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hh
c19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFYK
ICAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwg
Ynl0ZWNvZGUubV9icmFuZCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsKIH0KIAotI2lm
IFVTRShKU1ZBTFVFNjQpCi0KLXZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKLXsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCByZWdUMCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoOyArK2kp
Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkp
LCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotfQotCi0KLSNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi12b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAgUmVz
b2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRDb2RlQmxvY2spLm1fcmVzb2x2ZVR5cGU7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2Nv
cGU7Ci0KLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7Ci0KLSAgICBKdW1w
TGlzdCBzbG93Q2FzZTsKLQotICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IEludmFs
aWRHUFJSZWcpIHsKLSAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKGdsb2JhbE9iamVjdEdQUiA9PSBJbnZhbGlkR1BS
UmVnKSB7Ci0gICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKLSAgICAgICAgICAg
IGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgfQotICAgICAgICBs
b2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxP
YmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dD
YXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0Ojpv
ZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKLSAgICB9Owot
Ci0gICAgYXV0byBlbWl0UmVzb2x2ZUNsb3N1cmUgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MpIHsKLSAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyk7Ci0gICAgICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BSZXNvbHZl
U2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkxvY2FsU2NvcGVEZXB0aCgpLCByZWdUMSk7Ci0KLSAg
ICAgICAgQVNTRVJUKHNjb3BlR1BSID09IHJlZ1QwKTsKLSAgICAgICAgTGFiZWwgbG9vcCA9IGxh
YmVsKCk7Ci0gICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7Ci0g
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCBy
ZWdUMCk7Ci0gICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgICAgICBq
dW1wKCkubGlua1RvKGxvb3AsIHRoaXMpOwotICAgICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAg
fTsKLQotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7
Ci0gICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eToKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKLSAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBs
b2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgotICAgICAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMCk7Ci0gICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZDMyRnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2xv
YmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpLCByZWdUMSk7Ci0gICAgICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0Ojpv
ZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgR2xvYmFsVmFyOgotICAgICAgICBj
YXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgIGNhc2UgR2xvYmFs
TGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczogewotICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVC
bG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9yIEdsb2JhbFZhciosCi0g
ICAgICAgICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsTGV4aWNh
bEVudmlyb25tZW50KCkgZm9yIEdsb2JhbExleGljYWxWYXIqLgotICAgICAgICAgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUMCk7Ci0gICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwotICAgICAgICAgICAgaWYg
KHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRHluYW1pYzoKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgotICAgICAgICBj
YXNlIE1vZHVsZVZhcjoKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0g
ICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSAKLSAgICAgICAgbG9hZFB0
ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRP
ZkxleGljYWxFbnZpcm9ubWVudCgpLCByZWdUMCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKLSAgICAgICAgaWYgKHByb2ZpbGVk
UmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCBwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICAgICAgZW1pdENvZGUocHJvZmls
ZWRSZXNvbHZlVHlwZSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwotCi0gICAgICAgICAgICBKdW1wTGlzdCBza2lw
VG9FbmQ7Ci0gICAgICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2
ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZSZXNvbHZlVHlwZSgpLCByZWdUMSk7Ci0KLSAgICAg
ICAgICAgIGF1dG8gZW1pdENhc2UgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7Ci0g
ICAgICAgICAgICAgICAgSnVtcCBub3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBU
cnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSk7Ci0gICAgICAgICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAg
ICAgICAgICAgICAgIG5vdENhc2UubGluayh0aGlzKTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAg
ICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcik7Ci0gICAgICAgICAgICBlbWl0Q2FzZShHbG9iYWxQ
cm9wZXJ0eSk7Ci0gICAgICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAgICAg
ICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAg
ICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAg
ICAgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KTsKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgICAgICBz
a2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGFkZFNsb3dDYXNl
KHNsb3dDYXNlKTsKLQotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLX0KLQotI2Vs
c2UKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKQEAgLTIwOTQsMTEgKzE5ODIsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0KSA9PSBtX2J5
dGVjb2RlSW5kZXgpOwogICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5pbnN0cnVjdGlv
bkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKIAotICAgIC8vIElm
IHdlIHByb2ZpbGUgY2VydGFpbiByZXNvbHZlIHR5cGVzLCB3ZSdyZSBnYXVyYW50ZWVkIGFsbCBs
aW5rZWQgY29kZSB3aWxsIGhhdmUgdGhlIHNhbWUKKyAgICAvLyBJZiB3ZSBwcm9maWxlIGNlcnRh
aW4gcmVzb2x2ZSB0eXBlcywgd2UncmUgZ3VhcmFudGVlZCBhbGwgbGlua2VkIGNvZGUgd2lsbCBo
YXZlIHRoZSBzYW1lCiAgICAgLy8gcmVzb2x2ZSB0eXBlLgogCiAgICAgaWYgKHByb2ZpbGVkUmVz
b2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSAKLSAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkxleGljYWxFbnZpcm9ubWVu
dCgpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVz
b2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZMZXhpY2FsRW52aXJvbm1lbnQoKSwgcmV0dXJu
VmFsdWVHUFIpOwogICAgIGVsc2UgewogICAgICAgICB1aW50MzJfdCBtZXRhZGF0YU9mZnNldCA9
IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5
dGVjb2RlKTsKIApAQCAtMjEwNiw5ICsxOTk0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2
ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBj
b25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7CiAgICAgICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQ
YXlsb2FkKHNjb3BlLCBzY29wZUdQUik7CiAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWV0
YWRhdGFPZmZzZXQpLCBzX21ldGFkYXRhR1BSLCBtZXRhZGF0YUdQUik7Ci0KICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOwpAQCAtMjEz
NCw3ICsyMDIxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbChj
b2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgfQogCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGJveENlbGwocmV0dXJuVmFsdWVHUFIsIHJldHVyblZhbHVl
SlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVKU1IpOwog
fQogCiB0ZW1wbGF0ZSA8UmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZT4KQEAgLTIxNTEs
NyArMjAzOSwxMCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZNJiB2bSkKICAgICBjb25zdGV4cHIgR1BSUmVn
IG1ldGFkYXRhR1BSID0gcmVnVDI7IC8vIGluY29taW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBz
Y29wZUdQUiA9IHJlZ1QwOyAvLyBpbmNvbWluZwogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNv
ZGVPZmZzZXRHUFIgPSByZWdUNTsgLy8gaW5jb21pbmcgLSBwYXNzIHRocnUgdG8gc2xvdyBwYXRo
LgorICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOyAvLyBsb2NhbCB0ZW1w
b3JhcnkKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZzZXRHUFIpOworICAgIHN0YXRpY19h
c3NlcnQobm9PdmVybGFwKHJldHVyblZhbHVlR1BSLCBtZXRhZGF0YUdQUiwgYnl0ZWNvZGVPZmZz
ZXRHUFIsIHNjcmF0Y2hHUFIpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHNjb3BlR1BSID09IHJldHVy
blZhbHVlR1BSKTsgLy8gZW1pdFJlc29sdmVDbG9zdXJlIGFzc3VtZXMgdGhpcwogCiAgICAgaml0
LnRhZ1JldHVybkFkZHJlc3MoKTsKIApAQCAtMjE2MSwyMyArMjA1MiwyNCBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRo
dW5rKFZNJiB2bSkKICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKGdsb2JhbE9iamVjdEdQUiA9PSBJbnZhbGlkR1BS
UmVnKSB7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChzY3JhdGNoR1BSLCBy
ZWdUNCkpOwogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7Ci0gICAgICAgICAg
ICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qz
KTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zm
c2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBqaXQu
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICB9Ci0g
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0g
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywg
V2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0
ZWQpKSk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBB
ZGRyZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0
ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRSZXNvbHZl
Q2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBk
b1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgaml0
LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZMb2NhbFNjb3Bl
RGVwdGgoKSksIHJlZ1QxKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NvcGVHUFIgPT0gcmVn
VDApOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpv
ZmZzZXRPZkxvY2FsU2NvcGVEZXB0aCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHNjb3BlR1BSID09IHJldHVyblZhbHVlR1BSKTsKIAogICAgICAgICBMYWJlbCBsb29w
ID0gaml0LmxhYmVsKCk7Ci0gICAgICAgIEp1bXAgZG9uZSA9IGppdC5icmFuY2hUZXN0MzIoWmVy
bywgcmVnVDEpOwotICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpv
ZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgcmVnVDEpOworICAgICAgICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDMyKFplcm8sIHNj
cmF0Y2hHUFIpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJldHVyblZhbHVlR1BSLCBK
U1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgaml0LnN1
YjMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIGppdC5qdW1wKCkubGlu
a1RvKGxvb3AsICZqaXQpOwogICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgfTsKQEAgLTIx
ODcsMTEgKzIwNzksMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhWTSYgdm0pCiAgICAgICAgIGNhc2UgR2xv
YmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJs
b2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS4KLSAgICAgICAgICAgIGppdC5s
b2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKLSAgICAgICAgICAg
IGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2xvYmFs
TGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBw
ZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6
Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKKyAgICAgICAg
ICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJldHVyblZhbHVlR1BSKTsKKyAgICAg
ICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2go
KSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gz
MihOb3RFcXVhbCwgQWRkcmVzcyhyZXR1cm5WYWx1ZUdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNl
dE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgc2NyYXRjaEdQUikpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMjIwMSwxMSArMjA5MywxMSBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRo
dW5rKFZNJiB2bSkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVC
bG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9yIEdsb2JhbFZhciosCiAg
ICAgICAgICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsTGV4aWNh
bEVudmlyb25tZW50KCkgZm9yIEdsb2JhbExleGljYWxWYXIqLgotICAgICAgICAgICAgaml0Lmxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7Ci0gICAg
ICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xv
YmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAg
aml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgQ29kZUJs
b2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICAg
ICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSksIHJldHVyblZhbHVlR1BSKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9i
YWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKQotICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVn
VDApOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmV0dXJuVmFsdWVHUFIs
IEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmV0
dXJuVmFsdWVHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyOgpAQCAtMjI4NCw4ICsyMTc2LDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0m
IHZtCiAgICAgLy8gVGhlIGZhc3QgcGF0aCBhbHJlYWR5IHB1c2hlZCB0aGUgcmV0dXJuIGFkZHJl
c3MuCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7Ci0j
ZWxpZiBDUFUoQVJNNjQpCisjZWxpZiBDUFUoQVJNNjQpIHx8IENQVShBUk1fVEhVTUIyKQogICAg
IGppdC5wdXNoUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyNlbGlm
IENQVShNSVBTKQorICAgIGppdC5wdXNoUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgTUlQU1Jl
Z2lzdGVyczo6cmEpOworI2Vsc2UKKyMgICBlcnJvciAiTm90IGltcGxlbWVudGVkIG9uIHBsYXRm
b3JtIgogI2VuZGlmCiAKICAgICBjb25zdGV4cHIgR1BSUmVnIGluY29taW5nQnl0ZWNvZGVPZmZz
ZXRHUFIgPSByZWdUNTsKQEAgLTIyOTQsMTAgKzIxOTAsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZN
JiB2bQogICAgIGNvbnN0ZXhwciBHUFJSZWcgY29kZUJsb2NrR1BSID0gYXJndW1lbnRHUFIzOwog
ICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgaW5zdHJ1Y3Rpb25HUFIgPSBhcmd1bWVudEdQUjE7Ci0KLSAgICBz
dGF0aWNfYXNzZXJ0KGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIgIT0gY29kZUJsb2NrR1BSKTsK
LSAgICBzdGF0aWNfYXNzZXJ0KGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIgIT0gZ2xvYmFsT2Jq
ZWN0R1BSKTsKLSAgICBzdGF0aWNfYXNzZXJ0KGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIgIT0g
aW5zdHJ1Y3Rpb25HUFIpOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKGluY29taW5nQnl0
ZWNvZGVPZmZzZXRHUFIsIGNvZGVCbG9ja0dQUiwgZ2xvYmFsT2JqZWN0R1BSLCBpbnN0cnVjdGlv
bkdQUikpOwogCiAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCBjb2RlQmxvY2tHUFIpOwogICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoY29kZUJsb2Nr
R1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIp
OwpAQCAtMjMxMSw4ICsyMjA0LDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSklUOjpzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mIHZtCiAKICNpZiBD
UFUoWDg2XzY0KQogICAgIGppdC5wb3AoWDg2UmVnaXN0ZXJzOjplYnApOwotI2VsaWYgQ1BVKEFS
TTY0KQotICAgIGppdC5wb3BQYWlyKENDYWxsSGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIs
IENDYWxsSGVscGVyczo6bGlua1JlZ2lzdGVyKTsKKyNlbGlmIENQVShBUk02NCkgfHwgQ1BVKEFS
TV9USFVNQjIpCisgICAgaml0LnBvcFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdp
c3Rlcik7CisjZWxpZiBDUFUoTUlQUykKKyAgICBqaXQucG9wUGFpcihmcmFtZVBvaW50ZXJSZWdp
c3RlciwgTUlQU1JlZ2lzdGVyczo6cmEpOworI2Vsc2UKKyMgICBlcnJvciAiTm90IGltcGxlbWVu
dGVkIG9uIHBsYXRmb3JtIgogI2VuZGlmCiAgICAgaml0LnJldCgpOwogCkBAIC0yMzIyLDE3MiAr
MjIxOSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93
X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mIHZtCiAgICAgcGF0Y2hCdWZmZXIubGluayhl
eGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1
bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9yZXNvbHZlX3Njb3BlIik7CiB9Ci0jZW5kaWYg
Ly8gIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi12b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3Ry
dWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVT
bG90KQotewotICAgIGxvYWRQdHIoc3RydWN0dXJlU2xvdCwgcmVnVDEpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0
UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDEpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVy
YW5kLCBHUFJSZWcgcmVnKQotewotICAgIGxvYWRQdHIob3BlcmFuZCwgcmVnKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBH
UFJSZWcgcmVnKQotewotICAgIGxvYWRQdHIob3BlcmFuZCwgcmVnKTsKLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnKSwgcmVnKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1
YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpCi17Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNM
ZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9m
KFJlZ2lzdGVyKSksIHJlZ1QwKTsKLX0KLQotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
LXZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7
Ci0gICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotCi0gICAg
Y29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QyOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKLQotICAgIEp1bXBMaXN0IHNsb3dDYXNlOwotCi0gICAg
YXV0byBkb1ZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKSB7Ci0gICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwotICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJ
bmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJy
YW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUo
KSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwotICAgIH07Ci0gICAgCi0gICAgYXV0
byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgc3dp
dGNoIChyZXNvbHZlVHlwZSkgewotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAg
ICAgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0
IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRp
dGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmpl
Y3Rpb24uCi0gICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEZy
b21TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCksIHJlZ1QxKTsKLSAgICAgICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgICAg
ICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFs
LCBBZGRyZXNzKHNjb3BlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkp
OwotCi0gICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAo
KSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAg
ICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCByZWdUMyk7Ci0g
ICAgICAgICAgICB9KSk7Ci0KLSAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QxKTsK
LQotICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAgSnVt
cCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVnVDEsIFRydXN0
ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGFib3J0V2l0
aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRP
ZkxpbmUubGluayh0aGlzKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0g
ICAgICAgICAgICBuZWczMihyZWdUMSk7Ci0gICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihy
ZWdUMSwgcmVnVDEpOwotICAgICAgICAgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEs
IFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgR2xvYmFsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3M6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGRvVmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAg
ICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0RnJvbVNjb3BlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9i
YWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBw
ZW5kKGJyYW5jaElmRW1wdHkocmVnVDApKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3M6Ci0gICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5
dGVjb2RlLCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdU
Myk7Ci0gICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIp
KTsKLSAgICAgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigzKSwgcmVnVDMpOwotICAgICAg
ICAgICAgYWRkUHRyKHNjb3BlR1BSLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDMsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVn
VDApOwotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAg
ICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBpZiAocHJvZmlsZWRSZXNv
bHZlVHlwZSA9PSBDbG9zdXJlVmFyIHx8IHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgIGVtaXRDb2RlKHByb2ZpbGVkUmVzb2x2
ZVR5cGUpOwotICAgIGVsc2UgewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAg
IGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkdldFB1dEluZm8oKSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIo
R2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBU
MAotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsVmFy
LmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9u
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAg
ICBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVt
cCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGlzR2xvYmFsUHJvcGVy
dHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwotICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGlj
YWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGlu
ayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMu
bGluayh0aGlzKTsKLQotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKLQotICAgICAg
ICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICB9Ci0KLSAgICBhZGRTbG93Q2FzZShzbG93Q2Fz
ZSk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0gICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0KLSAgICBsb2Fk
R2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxl
KGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgYXJndW1lbnRHUFIwLCBpbnN0
cnVjdGlvbik7Ci19Ci0KLSNlbHNlCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwpAQCAtMjUwNiw3
ICsyMjM4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIHVpbnQzMl90IG1ldGFkYXRhT2Zmc2V0
ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUo
Ynl0ZWNvZGUpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKHNjb3BlLCBzY29wZUdQUik7CiAg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtZXRhZGF0YU9mZnNldCksIHNfbWV0YWRhdGFHUFIsIG1l
dGFkYXRhR1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKIApAQCAtMjUyOSw3ICsyMjYxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rPEds
b2JhbFZhcj4pOwogCiAgICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVKU1IpOwogfQogCiB0ZW1wbGF0ZSA8UmVz
b2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZT4KQEAgLTI1NDIsNiArMjI3NCwxMCBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21T
Y29wZVRodW5rKFZNJiB2bSkKICAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpN
ZXRhZGF0YTsKICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDQ7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
Ynl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsgLy8gVXNlZCBvbmx5IG9uIHNsb3cgcGF0aAorICAg
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOworICAgIFVOVVNFRF9QQVJBTShi
eXRlY29kZU9mZnNldEdQUik7CisgICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAocmV0dXJuVmFs
dWVKU1IsIG1ldGFkYXRhR1BSLCBzY29wZUdQUiwgYnl0ZWNvZGVPZmZzZXRHUFIsIHNjcmF0Y2hH
UFIpKTsKIAogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKQEAgLTI1NTIsMTAgKzIyODgsMTAgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRG
cm9tU2NvcGVUaHVuayhWTSYgdm0pCiAgICAgYXV0byBkb1ZhckluamVjdGlvbkNoZWNrID0gWyZd
IChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CiAgICAgICAgIGlmICghbmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGppdC5sb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0
KCkpLCByZWdUMyk7Ci0gICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9P
RkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1Qz
KTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJl
Z1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZh
bGlkYXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhz
Y3JhdGNoR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRyZXNzKHNj
cmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJ
c0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAgCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAo
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKQEAgLTI1NjMsMjkgKzIyOTksMjggQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2Nv
cGVUaHVuayhWTSYgdm0pCiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNh
c2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAv
LyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2Fj
aGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9u
YWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlv
bi4KLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9wR2V0RnJv
bVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHJlZ1QxKTsKLSAgICAgICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAg
ICAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5j
aDMyKE5vdEVxdWFsLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMSkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaFRlc3RQdHIoWmVy
bywgc2NyYXRjaEdQUikpOworICAgICAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKHNjcmF0Y2hH
UFIsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhzY29w
ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUikpOwogCiAgICAg
ICAgICAgICBqaXQuaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4g
SnVtcCB7Ci0gICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBqaXQuYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgcmVn
VDMpOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhzY3JhdGNoR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gaml0LmJyYW5jaFB0cihFcXVhbCwg
c2NvcGVHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5k
KCkpLCByZWdUMSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCBzY3JhdGNoR1BSKTsKIAogICAgICAgICAg
ICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGlu
ZSA9IGppdC5icmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIo
Zmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5l
ID0gaml0LmJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZElt
bTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0
aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7CiAgICAgICAgICAgICAgICAgaXNPdXRP
ZkxpbmUubGluaygmaml0KTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDAp
OwotICAgICAgICAgICAgaml0Lm5lZzMyKHJlZ1QxKTsKLSAgICAgICAgICAgIGppdC5zaWduRXh0
ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgICAgICAgICAgaml0LmxvYWQ2NChCYXNlSW5k
ZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY29wZUdQ
Uik7CisgICAgICAgICAgICBqaXQubmVnUHRyKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0
LmxvYWRWYWx1ZShCYXNlSW5kZXgoc2NvcGVHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQsIChm
aXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJldHVy
blZhbHVlSlNSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
R2xvYmFsVmFyOgpAQCAtMjU5MywyMCArMjMyOCwxNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiB2bSkK
ICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFu
ZCgpKSwgcmVnVDApOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCksIHJl
Z1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFk
YXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0Lmxv
YWRWYWx1ZShBZGRyZXNzKHNjcmF0Y2hHUFIpLCByZXR1cm5WYWx1ZUpTUik7CiAgICAgICAgICAg
ICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNrLgotICAg
ICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShyZWdUMCkpOwor
ICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShyZXR1cm5W
YWx1ZUpTUikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoK
ICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAg
ICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpKTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsICBNZXRh
ZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMyk7Ci0gICAgICAgICAgICBzdGF0aWNfYXNz
ZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgIGppdC5sc2hpZnQ2
NChUcnVzdGVkSW1tMzIoMyksIHJlZ1QzKTsKLSAgICAgICAgICAgIGppdC5hZGRQdHIoc2NvcGVH
UFIsIHJlZ1QzKTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIEpTTGV4
aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOwotCisgICAgICAg
ICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCAgTWV0YWRhdGE6Om9mZnNldE9m
T3BlcmFuZCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFZhbHVlKEJhc2VJ
bmRleChzY29wZUdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgSlNMZXhpY2FsRW52aXJvbm1l
bnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZXR1cm5WYWx1ZUpTUik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgogICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5k
KGppdC5qdW1wKCkpOwpAQCAtMjYyMywxMSArMjM1NCwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiB2
bSkKICAgICAgICAgZW1pdENvZGUocHJvZmlsZWRSZXNvbHZlVHlwZSk7CiAgICAgZWxzZSB7CiAg
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1l
dGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCkpLCByZWdUMCk7Ci0gICAg
ICAgIGppdC5hbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7
IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwg
c2NyYXRjaEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBzY3JhdGNoR1BSCiAKICAgICAg
ICAgYXV0byBlbWl0Q2FzZVdpdGhvdXRDaGVjayA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUpIHsKLSAgICAgICAgICAgIEp1bXAgbm90Q2FzZSA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgSnVtcCBub3RD
YXNlID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIocmVz
b2x2ZVR5cGUpKTsKICAgICAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKICAgICAgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBub3RDYXNlLmxp
bmsoJmppdCk7CkBAIC0yNjYxLDggKzIzOTIsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiB2bSkKICAg
ICB9CiAKICAgICBzdGF0aWNfYXNzZXJ0KFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzID09
IDEpOwotICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0
YTo6b2Zmc2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQo
KSkpOwotCisgICAgaml0LnN0b3JlVmFsdWUocmV0dXJuVmFsdWVKU1IsIEFkZHJlc3MobWV0YWRh
dGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0
T2ZGaXJzdEJ1Y2tldCgpKSk7CiAgICAgaml0LnJldCgpOwogCiAgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmsp
OwpAQCAtMjY4MCw4ICsyNDEwLDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJiB2CiAKICNpZiBD
UFUoWDg2XzY0KQogICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKLSNlbGlmIENQVShB
Uk02NCkKKyNlbGlmIENQVShBUk02NCkgfHwgQ1BVKEFSTV9USFVNQjIpCiAgICAgaml0LnB1c2hQ
YWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOworI2VsaWYgQ1BVKE1JUFMp
CisgICAgaml0LnB1c2hQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjpy
YSk7CisjZWxzZQorIyAgIGVycm9yICJOb3QgaW1wbGVtZW50ZWQgb24gcGxhdGZvcm0iCiAjZW5k
aWYKIAogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwpAQCAt
MjY5MiwzNyArMjQyNiw1MCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYgdgogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgY29kZUJsb2NrR1BSID0gYXJndW1lbnRHUFIzOwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
aW5zdHJ1Y3Rpb25HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgc3RhdGljX2Fzc2VydChpbmNvbWlu
Z0J5dGVjb2RlT2Zmc2V0R1BSICE9IGNvZGVCbG9ja0dQUik7Ci0gICAgc3RhdGljX2Fzc2VydChp
bmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSICE9IGdsb2JhbE9iamVjdEdQUik7Ci0gICAgc3RhdGlj
X2Fzc2VydChpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSICE9IGluc3RydWN0aW9uR1BSKTsKLSAg
ICBzdGF0aWNfYXNzZXJ0KG1ldGFkYXRhR1BSICE9IGNvZGVCbG9ja0dQUik7Ci0gICAgc3RhdGlj
X2Fzc2VydChtZXRhZGF0YUdQUiAhPSBnbG9iYWxPYmplY3RHUFIpOwotICAgIHN0YXRpY19hc3Nl
cnQobWV0YWRhdGFHUFIgIT0gaW5zdHJ1Y3Rpb25HUFIpOworICAgIHN0YXRpY19hc3NlcnQobm9P
dmVybGFwKG1ldGFkYXRhR1BSLCBpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSLCBjb2RlQmxvY2tH
UFIsIGdsb2JhbE9iamVjdEdQUiwgaW5zdHJ1Y3Rpb25HUFIpKTsKIAogICAgIGppdC5sb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKICAg
ICBqaXQubG9hZFB0cihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50ZXIo
KSksIGluc3RydWN0aW9uR1BSKTsKICAgICBqaXQuYWRkUHRyKGluY29taW5nQnl0ZWNvZGVPZmZz
ZXRHUFIsIGluc3RydWN0aW9uR1BSKTsKIAotICAgIEFTU0VSVChSZWdpc3RlclNldDo6Y2FsbGVl
U2F2ZVJlZ2lzdGVycygpLmNvbnRhaW5zKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKSk7Ci0g
ICAgaml0Lm1vdmUobWV0YWRhdGFHUFIsIEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKTsgLy8g
UHJlc2VydmUgbWV0YWRhdGEgaW4gYSBjYWxsZWUgc2F2ZWQgcmVnaXN0ZXIuCisgICAgLy8gUHJl
c2VydmUgbWV0YWRhdGEgaW4gYSBjYWxsZWUgc2F2ZWQgcmVnaXN0ZXIuCisjaWYgVVNFKEpTVkFM
VUU2NCkKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhQ1NSID0gR1BSSW5mbzo6bnVtYmVy
VGFnUmVnaXN0ZXI7CisgICAgYXV0byByZXN0b3JlSGlqYWNrZWRDU1IgPSBbJl0oKSB7CisgICAg
ICAgIGppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBHUFJJbmZvOjpu
dW1iZXJUYWdSZWdpc3Rlcik7CisgICAgfTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAg
Y29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUNTUiA9IHNfbWV0YWRhdGFHUFI7CisgICAgYXV0byBy
ZXN0b3JlSGlqYWNrZWRDU1IgPSBbJl0oKSB7CisgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgc19tZXRhZGF0YUdQUik7CisgICAgICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFk
YXRhVGFibGUoKSksIHNfbWV0YWRhdGFHUFIpOworICAgIH07CisjZW5kaWYKKyAgICBBU1NFUlQo
UmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKS5jb250YWlucyhtZXRhZGF0YUNTUikp
OworICAgIGppdC5tb3ZlKG1ldGFkYXRhR1BSLCBtZXRhZGF0YUNTUik7CisKICAgICBqaXQuc2V0
dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0RnJvbVNjb3BlKT4oZ2xvYmFsT2JqZWN0
R1BSLCBpbnN0cnVjdGlvbkdQUik7CiAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsK
ICAgICBDYWxsIG9wZXJhdGlvbiA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgSnVt
cCBleGNlcHRpb25DaGVjayA9IGppdC5lbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2sodm0p
OwogCi0gICAgaml0LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MoR1BSSW5mbzo6bnVtYmVyVGFnUmVn
aXN0ZXIsIE1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0
T2ZGaXJzdEJ1Y2tldCgpKSk7Ci0gICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51
bWJlclRhZyksIEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKTsKKyAgICBqaXQuc3RvcmVWYWx1
ZShyZXR1cm5WYWx1ZUpTUiwgQWRkcmVzcyhtZXRhZGF0YUNTUiwgTWV0YWRhdGE6Om9mZnNldE9m
UHJvZmlsZSgpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKKyAgICBy
ZXN0b3JlSGlqYWNrZWRDU1IoKTsKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnBvcChYODZS
ZWdpc3RlcnM6OmVicCk7Ci0jZWxpZiBDUFUoQVJNNjQpCisjZWxpZiBDUFUoQVJNNjQpIHx8IENQ
VShBUk1fVEhVTUIyKQogICAgIGppdC5wb3BQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5r
UmVnaXN0ZXIpOworI2VsaWYgQ1BVKE1JUFMpCisgICAgaml0LnBvcFBhaXIoZnJhbWVQb2ludGVy
UmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6OnJhKTsKKyNlbHNlCisjICAgZXJyb3IgIk5vdCBpbXBs
ZW1lbnRlZCBvbiBwbGF0Zm9ybSIKICNlbmRpZgogICAgIGppdC5yZXQoKTsKIAogICAgIGV4Y2Vw
dGlvbkNoZWNrLmxpbmsoJmppdCk7Ci0gICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
Ok51bWJlclRhZyksIEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKTsKKyAgICByZXN0b3JlSGlq
YWNrZWRDU1IoKTsKICAgICBKdW1wIGp1bXBUb0hhbmRsZXIgPSBqaXQuanVtcCgpOwogCiAgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CkBAIC0yNzMxLDcgKzI0NzgsNiBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdl
bmVyYXRvcihWTSYgdgogICAgIHBhdGNoQnVmZmVyLmxpbmsoanVtcFRvSGFuZGxlciwgQ29kZUxv
Y2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTog
c2xvd19vcF9nZXRfZnJvbV9zY29wZSIpOwogfQotI2VuZGlmIC8vICFFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CkBAIC0yNzQ3LDIzICsyNDkzLDI4IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czogewogICAgICAgICAgICAgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9u
IHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xv
YmFsT2JqZWN0LgogICAgICAgICAgICAgLy8gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhh
bmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgbG9hZFB0
ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZT
dHJ1Y3R1cmUoKSwgcmVnVDEpOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
Y29wZSwgcmVnVDApOwotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJv
LCByZWdUMSkpOwotICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMSkpOworICAgICAgICAgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHZhbHVlSlNS
ID0ganNSZWdUMTA7CisgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVn
VDI7CisgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIxID0gcmVnVDM7Cisg
ICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIyID0gcmVnVDQ7CisgICAgICAg
ICAgICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcCh2YWx1ZUpTUiwgc2NvcGVHUFIsIHNjcmF0Y2hH
UFIxLCBzY3JhdGNoR1BSMikpOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgc2NyYXRj
aEdQUjEpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoc2NvcGUs
IHNjb3BlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywg
c2NyYXRjaEdQUjEpKTsKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHNjcmF0Y2hHUFIxLCBT
dHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhzY29wZUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUjEpKTsKIAotICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVKU1IpOwogCiAgICAgICAgICAgICBqaXRBc3NlcnQo
c2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNo
UHRyKEVxdWFsLCByZWdUMCwgcmVnVDMpOworICAgICAgICAgICAgICAgIGxvYWRHbG9iYWxPYmpl
Y3Qoc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWws
IHNjb3BlR1BSLCBzY3JhdGNoR1BSMik7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVn
VDMpOwotICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Nj
b3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QxKTsKLSAgICAgICAgICAgIG5l
Z1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1Qz
LCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAg
IGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9m
ZnNldE9mT3BlcmFuZCgpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICBuZWdQdHIoc2NyYXRj
aEdQUjEpOworICAgICAgICAgICAgc3RvcmVWYWx1ZSh2YWx1ZUpTUiwgQmFzZUluZGV4KHNjcmF0
Y2hHUFIyLCBzY3JhdGNoR1BSMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0g
MikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJy
aWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KQEAgLTI3NzEsMjIgKzI1MjIsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAg
IGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgY2FzZSBHbG9i
YWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0VmFy
UmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSwgcmVnVDApOworICAgICAgICAgICAgc3RhdGljX2Fz
c2VydChub092ZXJsYXAoanNSZWdUMTAsIHJlZ1QyLCByZWdUMykpOworICAgICAgICAgICAgZW1p
dFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwg
cmVnVDIpOworICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUsIHJl
Z1QyKTsKIAotICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRU
b1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QwKTsKKyAgICAgICAgICAg
IGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9m
ZnNldE9mT3BlcmFuZCgpLCByZWdUMik7CiAKICAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXph
dGlvbihieXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNv
bHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIG5l
ZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3
ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgotICAgICAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCksIHJlZ1QxKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkVtcHR5KHJlZ1QxKSk7CisgICAgICAgICAgICAgICAgbG9hZFZhbHVlKEFkZHJl
c3MocmVnVDIpLCBqc1JlZ1QxMCk7CisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZFbXB0eShqc1JlZ1QxMCkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBsb2FkUHRy
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldh
dGNocG9pbnRTZXQoKSwgcmVnVDEpOwotICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hw
b2ludChyZWdUMSk7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBP
cFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDMpOwor
ICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMyk7CiAKLSAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICAgICAgICAgIHN0
b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDApKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIGpzUmVnVDEwKTsKKyAgICAgICAgICAgIHN0b3JlVmFsdWUoanNSZWdU
MTAsIEFkZHJlc3MocmVnVDIpKTsKIAogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29w
ZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjc5
NCwxNCArMjU0NiwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1
cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKKyAgICAgICAg
ICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKGpzUmVnVDEwLCByZWdUMiwgcmVnVDMpKTsKKyAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSksIHJlZ1QzKTsKIAotICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShi
eXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCks
IHJlZ1QwKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0
VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMyk7CiAgICAg
ICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFk
YXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDIpOwotICAgICAgICAgICAgZW1pdE5vdGlmeVdy
aXRlV2F0Y2hwb2ludChyZWdUMCk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMSk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3Bl
LCByZWdUMCk7Ci0gICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBCYXNlSW5kZXgocmVnVDAsIHJl
Z1QyLCBUaW1lc0VpZ2h0LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMo
KSkpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMyk7CisgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBqc1JlZ1QxMCk7CisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChzY29wZSwgcmVnVDMpOworICAgICAg
ICAgICAgc3RvcmVWYWx1ZShqc1JlZ1QxMCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNF
aWdodCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpKTsKIAogICAg
ICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVl
KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjk0OCwxMCArMjcwMSwxMCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1
bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwotICAgIGxvYWQ2NChBZGRyZXNz
KHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChhcmd1bWVudHMsIHJlZ1QwKTsKKyAg
ICBsb2FkVmFsdWUoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0
KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwganNSZWdUMTApOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIGpzUmVnVDEwKTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0yOTYwLDUxICsyNzEzLDE1IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVu
dHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0g
Ynl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIHN0b3Jl
NjQocmVnVDEsIEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgp
ICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworCisgICAgc3RhdGlj
X2Fzc2VydChub092ZXJsYXAocmVnVDIsIGpzUmVnVDEwKSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlclBheWxvYWQoYXJndW1lbnRzLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwganNSZWdUMTApOworICAgIHN0b3JlVmFsdWUoanNSZWdUMTAsIEFkZHJlc3Mo
cmVnVDIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwogCiAgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVu
dHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0V3JpdGVC
YXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0
ZUJhcnJpZXJNb2RlIG1vZGUpCi17Ci0gICAgLy8gdmFsdWUgbWF5IGJlIGludmFsaWQgVmlydHVh
bFJlZ2lzdGVyIGlmIG1vZGUgaXMgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBvciBTaG91bGRG
aWx0ZXJCYXNlLgotICAgIEp1bXAgdmFsdWVOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3Vs
ZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7Ci0gICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICAgICAgdmFsdWVO
b3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICB9Ci0gICAgCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVnVDApOwotICAgIEp1bXAgb3duZXJOb3RDZWxsOwot
ICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3Vs
ZEZpbHRlckJhc2UpCi0gICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7Ci0KLSAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNo
KHZtKCksIHJlZ1QwLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCByZWdUMCk7Ci0gICAgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwotCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxk
RmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKLSAgICAgICAg
b3duZXJOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFs
dWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIAotICAgICAgICB2YWx1ZU5v
dENlbGwubGluayh0aGlzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxs
KiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCi17
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgdmFs
dWVOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKQotICAgICAgICB2
YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgZW1pdFdyaXRlQmFy
cmllcihvd25lcik7Ci0KLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgCi0gICAg
ICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
aW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFs
RmllbGQ+KCk7CkBAIC0zMDEyLDExICsyNzI5LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9p
bnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIHVuc2lnbmVkIGlu
ZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDEpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2Jq
ZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwgcmVnVDApOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJhc2UsIHJlZ1QwKTsKKyAgICBsb2FkVmFsdWUo
QWRkcmVzcyhyZWdUMCwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVy
bmFsRmllbGQoaW5kZXgpKSwganNSZWdUMTApOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBqc1JlZ1QxMCk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGpzUmVnVDEwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CkBAIC0zMDI2LDEyICsyNzQzLDE1IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9m
aWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgaW5kZXggPSBi
eXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIHN0b3Jl
UHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9m
ZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG5vT3Zlcmxh
cChyZWdUMiwganNSZWdUMTApKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChi
YXNlLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwganNSZWdUMTAp
OworICAgIHN0b3JlVmFsdWUoanNSZWdUMTAsIEFkZHJlc3MocmVnVDIsIEpTSW50ZXJuYWxGaWVs
ZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOwogICAgIGVtaXRX
cml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKIH0KIAorI2lmIFVT
RShKU1ZBTFVFNjQpCisKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9y
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCk7
CkBAIC0zMjY4LDE4ICsyOTg4LDk2IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfaGFz
X293bl9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0CiAgICAgZW1p
dF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY3VycmVudEluc3RydWN0aW9uLCBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckhhc093blByb3BlcnR5PigpLCBzbG93X3BhdGhf
ZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KTsKIH0KIAotI2Vsc2UgLy8gVVNFKEpTVkFMVUU2
NCkKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9wcm9w
ZXJ0eV9lbnVtZXJhdG9yKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dfcGF0aF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcik7CisgICAgc2xvd1BhdGhDYWxs
LmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNs
b3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJhdG9y
X25leHQpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29w
X2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudElu
c3RydWN0aW9uLCBzbG93X3BhdGhfZW51bWVyYXRvcl9nZXRfYnlfdmFsKTsKKyAgICBzbG93UGF0
aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Cit9CisKK3ZvaWQgSklUOjpl
bWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2luX2J5X3ZhbCk7CisgICAgc2xv
d1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9oYXNf
b3duX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dfcGF0aF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpOworICAgIHNsb3dQYXRoQ2Fs
bC5jYWxsKCk7Cit9CisKKyNlbmRpZgorCisjaWYgVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAgICAvLyB2YWx1ZSBtYXkgYmUgaW52
YWxpZCBWaXJ0dWFsUmVnaXN0ZXIgaWYgbW9kZSBpcyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVy
IG9yIFNob3VsZEZpbHRlckJhc2UuCiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1v
ZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFs
dWUpIHsKLSAgICAgICAgZW1pdExvYWRUYWcodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgICAgICB2YWx1ZU5vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOwogICAgIH0KLSAgICAKLSAgICBlbWl0TG9hZChvd25lciwg
cmVnVDAsIHJlZ1QxKTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1Qw
KTsKKyAgICBKdW1wIG93bmVyTm90Q2VsbDsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJC
YXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQorICAgICAgICBvd25lck5v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgSnVtcCBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCByZWdUMCwgcmVnVDEpOworICAgIGNh
bGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRo
LCAmdm0oKSwgcmVnVDApOworICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlz
KTsKKworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09
IFNob3VsZEZpbHRlckJhc2UpCisgICAgICAgIG93bmVyTm90Q2VsbC5saW5rKHRoaXMpOworICAg
IGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFz
ZUFuZFZhbHVlKQorICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKK30KKwordm9pZCBK
SVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
LCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOworICAgIEp1bXAgdmFsdWVOb3RDZWxsOworICAgIGlmIChtb2RlID09IFNo
b3VsZEZpbHRlclZhbHVlKQorICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDApOworCisgICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7CisKKyAgICBpZiAobW9kZSA9
PSBTaG91bGRGaWx0ZXJWYWx1ZSkKKyAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7Cit9
CisKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVy
KFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJp
ZXJNb2RlIG1vZGUpCit7CisgICAgLy8gdmFsdWUgbWF5IGJlIGludmFsaWQgVmlydHVhbFJlZ2lz
dGVyIGlmIG1vZGUgaXMgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBvciBTaG91bGRGaWx0ZXJC
YXNlLgorICAgIEp1bXAgdmFsdWVOb3RDZWxsOworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRl
clZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgdmFsdWVOb3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICB9CisKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG93bmVyLCByZWdUMCwgcmVnVDEpOwogICAgIEp1bXAgb3duZXJOb3RDZWxsOwog
ICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2UgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJC
YXNlQW5kVmFsdWUpCiAgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CkBAIC0zMjkwLDcgKzMwODgsNyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0
dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYQogCiAgICAg
aWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VB
bmRWYWx1ZSkKICAgICAgICAgb3duZXJOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgaWYgKG1vZGUg
PT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUp
IAorICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmls
dGVyQmFzZUFuZFZhbHVlKQogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIApA
QCAtMzI5OCwxNyArMzA5NiwxNyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwq
IG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZAogewogICAgIEp1
bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSB7Ci0g
ICAgICAgIGVtaXRMb2FkVGFnKHZhbHVlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJUYWcodmFsdWUsIHJlZ1QwKTsKICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKICAgICB9CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKG93bmVyKTsK
IAotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSAKKyAgICBpZiAobW9kZSA9PSBT
aG91bGRGaWx0ZXJWYWx1ZSkKICAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAK
LSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQorI2VuZGlmCiAKIHZvaWQgSklUOjplbWl0V3JpdGVC
YXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2MGI2MzJlOTRkMWRlZjJmNDIz
MGYwYTg0YmU4MzZjZmQ3MzUyYTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
Ci0jaWYgRU5BQkxFKEpJVCkKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotI2luY2x1ZGUgIkpJVC5o
IgotCi0jaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKLSNpbmNsdWRlICJD
b2RlQmxvY2suaCIKLSNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKLSNpbmNsdWRlICJHQ0F3
YXJlSklUU3R1YlJvdXRpbmUuaCIKLSNpbmNsdWRlICJJbnRlcnByZXRlcklubGluZXMuaCIKLSNp
bmNsdWRlICJKSVRJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNBcnJheS5oIgotI2luY2x1ZGUgIkpT
RnVuY3Rpb24uaCIKLSNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgotI2luY2x1ZGUg
IkpTUHJvbWlzZS5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJPcGNvZGVJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiUmVzdWx0VHlwZS5oIgotI2luY2x1ZGUgIlNsb3dQYXRoQ2Fs
bC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCi0jaW5jbHVkZSA8d3RmL1N0cmlu
Z1ByaW50U3RyZWFtLmg+Ci0KLQotbmFtZXNwYWNlIEpTQyB7Ci0gICAgCi12b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRH
ZXR0ZXJCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgaW50IG9wdGlv
bnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGdldHRlciA9
IGJ5dGVjb2RlLm1fYWNjZXNzb3I7Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDEp
OwotICAgIGVtaXRMb2FkUGF5bG9hZChnZXR0ZXIsIHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCByZWdUMSwgbV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1w
bCgpLCBvcHRpb25zLCByZWdUMyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5SWQ+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgaW50IHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBpbnQgb3B0aW9ucyA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2V0dGVyID0gYnl0ZWNvZGUubV9hY2Nl
c3NvcjsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMSk7Ci0gICAgZW1pdExvYWRQ
YXlsb2FkKHNldHRlciwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0
dGVyQnlJZCwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX3By
b2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJl
Z1QzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlclNldHRlckJ5SWQ+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgaW50IHByb3BlcnR5
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBpbnQgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZ2V0dGVyID0gYnl0ZWNvZGUubV9nZXR0
ZXI7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNldHRlciA9IGJ5dGVjb2RlLm1fc2V0dGVyOwotCi0g
ICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0TG9hZFBheWxvYWQoZ2V0
dGVyLCByZWdUMyk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKHNldHRlciwgcmVnVDQpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBtX3Byb2ZpbGVkQ29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIo
cHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlcywgcmVnVDMsIHJlZ1Q0KTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dEdldHRlckJ5VmFsPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwot
ICAgIFZpcnR1YWxSZWdpc3RlciBnZXR0ZXIgPSBieXRlY29kZS5tX2FjY2Vzc29yOwotCi0gICAg
ZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QyKTsKLSAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVn
VDEsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZFBheWxvYWQoZ2V0dGVyLCByZWdUMyk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgbV9wcm9maWxlZENvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBhdHRyaWJ1
dGVzLCByZWdUMyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeVZhbD4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGludDMyX3QgYXR0cmlidXRlcyA9
IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2V0dGVyID0gYnl0
ZWNvZGUubV9hY2Nlc3NvcjsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMik7Ci0g
ICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdExvYWRQYXlsb2Fk
KHNldHRlciwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlW
YWwsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMiwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgYXR0cmlidXRlcywgcmVnVDMpOwotfQotCi12b2lkIEpJVDo6ZW1p
dFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29w
ZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCi17Ci0gICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCByZWdUMCk7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QxKTsKLSAgICBlbWl0
TG9hZFBheWxvYWQoc2NvcGUsIHJlZ1QwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZGVwdGg7ICsraSkKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZz
ZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwot
fQotCi12b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUu
bV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2
ZVR5cGU7Ci0gICAgdW5zaWduZWQgZGVwdGggPSBtZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsK
LQotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7Ci0g
ICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eToKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
LSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNj
b3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVn
VDApOwotICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dsb2JhbExleGljYWxCaW5kaW5n
RXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3MobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFk
ZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0gICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDEpOwotICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAg
ICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLQotICAgICAgICBjYXNlIEdsb2JhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiAKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgot
ICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0g
ICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29w
ZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9wcm9maWxlZENvZGVCbG9jayk7Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1Qw
KTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZWdU
MSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1Qw
KTsKLSAgICAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNh
c2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0UmVz
b2x2ZUNsb3N1cmUoZHN0LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpLCBkZXB0aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNb2R1bGVWYXI6
Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDEp
OwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNhbEVudmly
b25tZW50LmdldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEs
IHJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAg
ICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eToKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQot
ICAgIH07Ci0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAg
ICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVz
b2x2ZVR5cGUsIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAg
ICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7Ci0KLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1p
dENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKTsKLQotICAgICAg
ICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
VW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxv
YWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7Ci0gICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHku
bGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmso
dGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBl
bWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAg
SnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAg
bm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAg
ICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJl
c29sdmVUeXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEpJVDo6ZW1pdExv
YWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBz
dHJ1Y3R1cmVTbG90KQotewotICAgIGVtaXRMb2FkKHNjb3BlLCByZWdUMSwgcmVnVDApOwotICAg
IGxvYWRQdHIoc3RydWN0dXJlU2xvdCwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0
cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDIpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBv
cGVyYW5kLCBHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9hZCkKLXsKLSAgICB1aW50cHRyX3QgcmF3
QWRkcmVzcyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG9wZXJhbmQpOwotICAgIGxvYWQzMihi
aXR3aXNlX2Nhc3Q8dm9pZCo+KHJhd0FkZHJlc3MgKyBUYWdPZmZzZXQpLCB0YWcpOwotICAgIGxv
YWQzMihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHJhd0FkZHJlc3MgKyBQYXlsb2FkT2Zmc2V0KSwgcGF5
bG9hZCk7Ci19Ci12b2lkIEpJVDo6ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1
ZSoqIG9wZXJhbmQsIEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkKQotewotICAgIGxvYWRQdHIo
b3BlcmFuZCwgcGF5bG9hZCk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocGF5bG9hZCwgVGFnT2Zmc2V0
KSwgdGFnKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhwYXlsb2FkLCBQYXlsb2FkT2Zmc2V0KSwgcGF5
bG9hZCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQotewotICAgIGVtaXRMb2FkKHNjb3BlLCByZWdUMSwg
cmVnVDApOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6
b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpICsgVGFnT2Zm
c2V0KSwgcmVnVDEpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9u
bWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpICsg
UGF5bG9hZE9mZnNldCksIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2sp
OwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Ci0gICAgU3RydWN0
dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsKLSAgICB1
aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0
YWRhdGEubV9vcGVyYW5kKTsKLSAgICAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7Ci0gICAgICAg
IHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAg
ICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsg
Ly8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgR1BS
UmVnIGJhc2UgPSByZWdUMjsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRUYWcgPSByZWdUMTsK
LSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkID0gcmVnVDA7Ci0gICAgICAgICAgICBH
UFJSZWcgb2Zmc2V0ID0gcmVnVDM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1vdmUocmVn
VDAsIGJhc2UpOwotICAgICAgICAgICAgbG9hZDMyKG9wZXJhbmRTbG90LCBvZmZzZXQpOwotICAg
ICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091
dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1t
MzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBhYm9ydFdpdGhSZWFz
b24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwotICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5l
LmxpbmsodGhpcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
YmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgYmFzZSk7Ci0gICAgICAgICAgICBu
ZWczMihvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDMyKEJhc2VJbmRleChiYXNlLCBvZmZzZXQs
IFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSAr
IChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJl
c3VsdFBheWxvYWQpOwotICAgICAgICAgICAgbG9hZDMyKEJhc2VJbmRleChiYXNlLCBvZmZzZXQs
IFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpICsgKGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0
VGFnKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2xvYmFs
VmFyOgotICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAg
ICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKLSAgICAgICAg
ICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRHZXRW
YXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90
KSwgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0
R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCBy
ZWdUMSwgcmVnVDApOwotICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGlj
YWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkVtcHR5KHJlZ1QxKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDbG9zdXJl
VmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAg
ICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGUs
ICpvcGVyYW5kU2xvdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEeW5hbWlj
OgotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6
Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgICAgICBjYXNlIFVucmVzb2x2
ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHN3aXRjaCAocmVz
b2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0Vu
ZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAg
ICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBM
b2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVy
dHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkp
OwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNOb3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRo
aXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGlj
YWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBz
a2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7
Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1Qw
KTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFBy
b3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVy
dHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlz
KTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKLSAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFy
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZh
cikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxp
bmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLQotICAg
ICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
ZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCkpOwotICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQ
cm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgbV9wcm9maWxlZENv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQg
SklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdExvYWQodmFsdWUsIHJl
Z1QxLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgdWludHB0cl90IHJh
d0FkZHJlc3MgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihvcGVyYW5kKTsKLSAgICBzdG9yZTMy
KHJlZ1QxLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHJhd0FkZHJlc3MgKyBUYWdPZmZzZXQpKTsKLSAg
ICBzdG9yZTMyKHJlZ1QwLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHJhd0FkZHJlc3MgKyBQYXlsb2Fk
T2Zmc2V0KSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChK
U1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBv
aW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewotICAgIGVtaXRMb2FkKHZhbHVlLCBy
ZWdUMSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMik7
Ci0gICAgZW1pdE5vdGlmeVdyaXRlKCppbmRpcmVjdFdhdGNocG9pbnRTZXQpOyAvLyBGSVhNRTog
Pz8KLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QyKTsKLSAgICBzdG9yZTMyKHJl
Z1QxLCBBZGRyZXNzKHJlZ1QyLCBUYWdPZmZzZXQpKTsKLSAgICBzdG9yZTMyKHJlZ1QwLCBBZGRy
ZXNzKHJlZ1QyLCBQYXlsb2FkT2Zmc2V0KSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0Q2xvc3Vy
ZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0TG9hZCh2YWx1ZSwg
cmVnVDMsIHJlZ1QyKTsKLSAgICBlbWl0TG9hZChzY29wZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBl
bWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZTMyKHJlZ1QzLCBBZGRyZXNzKHJlZ1QwLCBK
U0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXpl
b2YoUmVnaXN0ZXIpICsgVGFnT2Zmc2V0KSk7Ci0gICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhy
ZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5k
ICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Ci17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Nj
b3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxl
ZENvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29w
ZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEdl
dFB1dEluZm8gZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spLm1fZ2V0UHV0SW5mbzsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dElu
Zm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRh
dGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwotICAgIAotICAg
IGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGly
ZWN0TG9hZEZvck9wZXJhbmQpIHsKLSAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAg
ICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX3By
b2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVl
KTsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1
cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uLgotICAgICAg
ICAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QzLCByZWdUMik7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEpOwotICAg
ICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlMzIocmVnVDMsIEJhc2VJ
bmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIp
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgICAgICAgICAgc3RvcmUzMihyZWdUMiwgQmFz
ZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0g
MikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBHbG9iYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgotICAg
ICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAg
ICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZv
ckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9wcm9maWxlZENvZGVCbG9jayk7Ci0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJh
cnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKLSAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVU
eXBlLCByZWdUMCk7Ci0gICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5m
by5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxW
YXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJl
IGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tz
IHN0YXRpY2FsbHkuCi0gICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQp
Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdp
c2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QxLCByZWdUMCk7Ci0gICAg
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAg
ICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUq
Kj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdp
c2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hw
b2ludFNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFJl
c29sdmVkQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNl
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFdyaXRl
QmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKLSAgICAgICAgICAgIGVt
aXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSks
IHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNs
b3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsK
LSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVU
eXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBKdW1wIGlz
R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8g
cHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBjb25zdCBiaW5kaW5nLgotCi0gICAg
ICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRo
aXMpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBza2lw
VG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigm
bWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0z
MihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRv
IFQwCi0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAg
ICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFs
UHJvcGVydHksIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAg
ICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAg
ICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9i
YWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcywgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAg
bm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAg
ICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUo
cmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5y
ZXNvbHZlVHlwZSgpOwotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKLSAgICAg
ICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dfcGF0aF90aHJvd19zdHJpY3RfbW9kZV9yZWFkb25seV9wcm9wZXJ0eV93cml0ZV9lcnJv
cik7Ci0gICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29w
X2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJv
bUFyZ3VtZW50cz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwot
ICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICAKLSAgICBlbWl0TG9hZFBh
eWxvYWQoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIERpcmVj
dEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSArIFRhZ09mZnNldCksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOwotICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4
ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBQYXlsb2FkT2Zmc2V0KSwgcmVzdWx0
UmVncy5wYXlsb2FkR1BSKCkpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IHJlc3VsdFJlZ3MpOwotICAgIGVtaXRTdG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJl
c3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2Fy
Z3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9Bcmd1bWVudHM+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwot
ICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3Vt
ZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKLSAgICAKLSAgICBlbWl0TG9hZFBheWxv
YWQoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMik7
Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9y
YWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgVGFn
T2Zmc2V0KSk7Ci0gICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1l
bnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pICsgUGF5bG9hZE9mZnNldCkpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJu
YWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIHVuc2lnbmVkIGluZGV4ID0g
Ynl0ZWNvZGUubV9pbmRleDsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApOwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QyKTsK
LSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+Ojpv
ZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpICsgVGFnT2Zmc2V0KSwgcmVzdWx0UmVncy50YWdH
UFIoKSk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDIsIEpTSW50ZXJuYWxGaWVsZE9iamVjdElt
cGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSArIFBheWxvYWRPZmZzZXQpLCByZXN1
bHRSZWdzLnBheWxvYWRHUFIoKSk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVzdWx0UmVncy50YWdHUFIoKSwg
cmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50
ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEludGVybmFsRmll
bGQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICB1bnNpZ25lZCBp
bmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVn
VDApOwotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDIpOwotICAgIHN0b3JlMzIocmVn
VDEsIEFkZHJlc3MocmVnVDAsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJ
bnRlcm5hbEZpZWxkKGluZGV4KSArIFRhZ09mZnNldCkpOwotICAgIHN0b3JlMzIocmVnVDIsIEFk
ZHJlc3MocmVnVDAsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5h
bEZpZWxkKGluZGV4KSArIFBheWxvYWRPZmZzZXQpKTsKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJh
c2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dl
dF9wcm9wZXJ0eV9lbnVtZXJhdG9yKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcik7Ci0gICAgc2xvd1Bh
dGhDYWxsLmNhbGwoKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU2xvd1BhdGhD
YWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVt
ZXJhdG9yX25leHQpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3Vy
cmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW51bWVyYXRvcl9nZXRfYnlfdmFsKTsKLSAgICBz
bG93UGF0aENhbGwuY2FsbCgpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRv
cl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpCi17Ci0gICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlz
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2luX2J5X3ZhbCk7Ci0g
ICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRv
cl9oYXNfb3duX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Ci17Ci0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpOwotICAgIHNsb3dQ
YXRoQ2FsbC5jYWxsKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gVVNF
KEpTVkFMVUUzMl82NCkKLSNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCmluZGV4IDdjYTFiNGU3YzNmZDA4NGRkMjdhYzM4NTA2
YWE5YzZhZWQ5NWRlYjAuLmYxODZmYjgyYjFmZjk3OGQ4ZjY3YTRmMDUzMzhlOWNmYjRjODIzNzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKQEAgLTM2LDcg
KzM2LDcgQEAKICNpZiBFTkFCTEUoSklUKQogCiBuYW1lc3BhY2UgSlNDIHsKLSAgICBjbGFzcyBK
U0ludGVyZmFjZUpJVCA6IHB1YmxpYyBDQ2FsbEhlbHBlcnMsIHB1YmxpYyBHUFJJbmZvLCBwdWJs
aWMgRlBSSW5mbyB7CisgICAgY2xhc3MgSlNJbnRlcmZhY2VKSVQgOiBwdWJsaWMgQ0NhbGxIZWxw
ZXJzLCBwdWJsaWMgR1BSSW5mbywgcHVibGljIEpTUkluZm8sIHB1YmxpYyBGUFJJbmZvIHsKICAg
ICBwdWJsaWM6CiAKICAgICAgICAgSlNJbnRlcmZhY2VKSVQoVk0qIHZtID0gbnVsbHB0ciwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuY3BwCmluZGV4IDI5NzE0N2UxYzRjMDhkY2NkNWY3Yjc4NjQxMWQ4
NTViMmExZGU0N2MuLjhmOGY2MmE1ZjU2MzM4NzkzYzk0NjdjOTdlYTM5NzM2Y2Q4OTkyZGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKQEAgLTQx
LDggKzQxLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVFeGNl
cHRpb25HZW5lcmF0b3IoVk0mIHZtKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CkBAIC02MSw2
ICs1OSw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhj
ZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgSklUVGh1bmtQdHJUYWcsICJoYW5kbGVFeGNlcHRpb24iKTsKIH0KIAorI2lmIEVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQorCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja0dlbmVyYXRvcihWTSYgdm0p
CiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKQEAgLTc3LDE0ICs3NywyMCBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVS
b2xsYmFja0dlbmVyYQogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRU
aHVua1B0clRhZywgImhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFjayIpOwogfQog
CisjZW5kaWYKKwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVu
a1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAg
ICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQuYWRkUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDIgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpKSwgWDg2UmVn
aXN0ZXJzOjplc3ApOwotI2VsaWYgQ1BVKEFSTTY0KQorI2VsaWYgQ1BVKEFSTTY0KSB8fCBDUFUo
QVJNX1RIVU1CMikKICAgICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJl
Z2lzdGVyLCBDQ2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rlcik7CisjZWxpZiBDUFUoTUlQUykKKyAg
ICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBNSVBTUmVn
aXN0ZXJzOjpyYSk7CisjZWxzZQorIyAgIGVycm9yICJOb3QgaW1wbGVtZW50ZWQgb24gcGxhdGZv
cm0iCiAjZW5kaWYKIAogICAgIENDYWxsSGVscGVyczo6SnVtcCBjb250aW51YXRpb24gPSBqaXQu
anVtcCgpOwpAQCAtOTUsNiArMTAxLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2UKICAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJwb3BUaHVu
a1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uIik7CiB9CiAKKyNpZiBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKKwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBj
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCmluZGV4IDBmOWY2
ZTJkMzZmNmRkMjNlMTg3MjZhY2U2MzE0YTMwYTIwMWRiY2UuLjIyNzhlODA0Y2UwNTQ0YTdiZTVh
NzhhN2U4M2ZmNWNhY2ZkZGM3ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvVGh1bmtHZW5lcmF0b3JzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVu
a0dlbmVyYXRvcnMuaApAQCAtMzcsMTIgKzM3LDEyIEBAIGNsYXNzIFZNOwogCiAjaWYgRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja0dlbmVy
YXRvcihWTSYpOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVu
a1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CiAKICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRs
ZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOwogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSYpOwog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443094</attachid>
            <date>2021-11-02 08:38:20 -0700</date>
            <delta_ts>2021-11-02 09:38:44 -0700</delta_ts>
            <desc>v1</desc>
            <filename>bug-232624-20211102153819.patch</filename>
            <type>text/plain</type>
            <size>211562</size>
            <attacher name="Geza Lore">glore</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1MTU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
NjljMDk1ODkzYTU3MzY3NWM2ODZhYTk5M2ExODVmMzEwMmUxZGEwLi5kZTRiNTg5NTI5ODMxN2Mx
YWM3ZDMyODA1NDViYjJmOTEzOTU1NzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODggQEAKKzIwMjEtMTEtMDIgIEdlemEgTG9yZSAgPGdsb3JlQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0pTQ10gRW5hYmxlIHNoYXJpbmcgb2YgdW5saW5rZWQgYmFzZWxpbmUgY29kZSBv
biBKU1ZBTFVFMzJfNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzMjYyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggY29udGFpbnMgYSBmZXcgZGlmZmVyZW50IGNoYW5nZXMsIHdoaWNo
IHRha2VuIHRvZ2V0aGVyCisgICAgICAgIGVuYWJsZSB0aGUgc2hhcmluZyBvZiB0aGUgdW5saW5r
ZWQgYmFzZWxpbmUgSklUIGNvZGUgYmV0d2VlbiBkaWZmZXJlbnQKKyAgICAgICAgQ29kZUJsb2Nr
cyBvbiBKU1ZBTFVFMzJfNjQgcGxhdGZvcm1zICh0aGUgc2FtZSB3YXkgYXMgdGhpcyBjb2RlIGlz
CisgICAgICAgIHNoYXJlZCBvbiBKU1ZBTFVFNjQgcGxhdGZvcm1zKS4KKworICAgICAgICAxLiBB
IGxvdCBvZiBiYXNlbGluZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIG9wY29kZXMgdGhhdCBuZWVk
ZWQKKyAgICAgICAgY2hhbmdpbmcgZm9yIHRoZSB1bmxpbmtlZCBiYXNlbGluZSBhcmUgbm93IHVu
aWZpZWQgYmV0d2VlbiB0aGUKKyAgICAgICAgSlNWQUxVRTY0IGFuZCBKU1ZBTFVFMzJfNjQgcGxh
dGZvcm1zLiBOb3RlIHRoYXQgd2hpbGUgdGhpcyByZXF1aXJlZAorICAgICAgICBhZGRpbmcgc29t
ZSBhYnN0cmFjdGlvbiwgdGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBiYXNlbGluZSBKSVQgc2hv
dWxkCisgICAgICAgIGJlIGlkZW50aWNhbCB1c2luZyB0aGlzIGFic3RyYWN0aW9uIGNvbXBhcmVk
IHRvIGJlZm9yZS4KKworICAgICAgICAyLiBJIGFkZGVkIGEgSlNSSW5mbyBjbGFzcyB3aGljaCBk
ZWZpbmVzIHN0YW5kYXJkIG5hbWVzIGZvciBjZXJ0YWluCisgICAgICAgIEpTVmFsdWVSZWcgaW5z
dGFuY2VzLiBUaGlzIGVuYWJsZXMgYSBsb3Qgb2YgdGhlIHVuaWZpY2F0aW9uIGluIHRoZQorICAg
ICAgICBwb2ludCBhYm92ZSB0byBiZSBhIHNpbXBsZSB0cmFuc2Zvcm1hdGlvbi4gQWdhaW4sIHRo
aXMgc2hvdWxkIGhhdmUgbm8KKyAgICAgICAgaW1wYWN0IG9uIHRoZSBnZW5lcmF0ZWQgY29kZSBv
biBKU1ZBTFVFNjQsIGFwYXJ0IGZyb20gc29tZSByZWdpc3RlcgorICAgICAgICBzdWJzdGl0dXRp
b25zLgorCisgICAgICAgIDMuIFRoZSBzaXplcyBvZiB0aGUgcmVzb2x2ZV9zY29wZSBhbmQgZ2V0
X2Zyb21fc2NvcGUgb3BzIGluY3JlYXNlZAorICAgICAgICBzaWduaWZpY2FudGx5IHdpdGggdGhl
IHVubGlua2VkIGJhc2VsaW5lLiBUaGlzIGNhbiBjYXVzZSBpc3N1ZXMgb24KKyAgICAgICAgc29t
ZSBKU1ZBTFVFMzJfNjQgdGFyZ2V0cyB3aGVyZSBtZW1vcnkgaXMgbW9yZSBwcmVjaW91cywgc28g
Zm9yIHRoZXNlCisgICAgICAgIHR3byBvcHMgSSBzd2FwcGVkIGluIHRoZSBpbXBsZW1lbnRhdGlv
bnMgdW5kZXIgRVhUUkFfQ1RJX1RIVU5LUywgd2hpY2gKKyAgICAgICAgaW1wbGVtZW50IHRoZXNl
IHVzaW5nIHNoYXJlZCBzdHVicy4gVGhlc2Ugc3R1YnMgd29yayBvbiBhbGwgcGxhdGZvcm1zCisg
ICAgICAgIHRoYXQgc3VwcG9ydCBFTkFCTEUoSklUKSwgc28gdGhleSBhcmUgbm93IHRoZSBvbmx5
IGltcGxlbWVudGF0aW9uIGFuZAorICAgICAgICBJIGhhdmUgcmVtb3ZlZCB0aGUgYmFzaWMgYmxv
YXRlZCB2ZXJzaW9ucy4gTm90ZSBwdXRfdG9fc2NvcGUgc3VmZmVycworICAgICAgICBmcm9tIHRo
ZSBzYW1lIGNvZGUgc2l6ZSBpbmNyZWFzZSBidXQgY3VycmVudGx5IGRvZXMgbm90IGhhdmUgYSBz
aGFyZWQKKyAgICAgICAgc3R1YiBiYXNlZCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyBPSyBmb3Ig
bm93IHRvIHBhc3MgdGhlIHRlc3Qgc3VpdGVzCisgICAgICAgIG9uIEpTVkFMVUUzMl82NCwgYnV0
IHByb2JhYmx5IHNob3VsZCBiZSBhZGRyZXNzZWQgbGF0ZXIuCisKKyAgICAgICAgNC4gUmVtb3Zl
ZCBzb21lIHVudXNlZCBjb2RlIGFuZCBmaWVsZHMgSSBkaXNjb3ZlcmVkIHdoaWxlIHdvcmtpbmcg
b24KKyAgICAgICAgdGhpcywgc3RyaWN0bHkgc3BlYWtpbmcgdGhpcyBpcyBub3QgbmVjZXNzYXJ5
IGZvciB0aGUgZnVuY3Rpb25hbAorICAgICAgICBjaGFuZ2UuCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjpzdG9yZVZhbHVlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpp
c051bGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmlzTm90TnVsbCk6CisgICAg
ICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFR1cm5VbmRlZmluZWRJbnRvTnVsbCk6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6bm9PdmVybGFwKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpub092ZXJsYXBJbXBsKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjpub092ZXJsYXBJbXBsUmVnTWFzayk6CisgICAgICAgICogaml0L0dQUkluZm8uaDoK
KyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcyk6CisgICAgICAgIChKU0M6OkpJVDo6bGluayk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycyk6CisgICAgICAgICogaml0L0pJVC5o
OgorICAgICAgICAqIGppdC9KSVRBcml0aG1ldGljLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wSW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJl
VW5zaWduZWRBbmRKdW1wSW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlVW5z
aWduZWRJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX21vZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9j
b21wYXJlVW5zaWduZWRBbmRKdW1wKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVV
bnNpZ25lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3cpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcCk6CisgICAgICAgICogaml0L0pJ
VEFyaXRobWV0aWMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF91bnNpZ25l
ZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbmMpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZGVjKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVTZXR1cEZyYW1l
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgICogaml0L0pJVElubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFudE9wZXJhbmQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0
VmlydHVhbFJlZ2lzdGVyVGFnKToKKyAgICAgICAgKEpTQzo6bG9hZEFkZHJPZkNvZGVCbG9ja0Nv
bnN0YW50QnVmZmVyKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkQ29kZUJsb2NrQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudFBheWxvYWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudFRhZyk6CisgICAgICAgICogaml0
L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbW92KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2VuZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9u
ZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfamZhbHNlKToKKyAgICAgICAgKEpTQzo6SklUOjp2YWx1ZUlzRmFsc2V5R2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2plcV9udWxsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2puZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXFf
cHRyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2plcSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdHJ1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6dmFs
dWVJc1RydXRoeUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXEpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0RXEpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRj
aF9jaGFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9uZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b190aGlzKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmND
b21tb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5j
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2lzX2VtcHR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2Jvb2xlYW4pOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2lzX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX25vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdW5kZWZp
bmVkX29yX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3Jf
bnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXFfcHRyKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Vx
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lcSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9qZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcEVxSnVtcFNsb3cp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcSk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVPcFN0cmljdEVxSnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfanN0
cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX251bWJlcik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF90b19udW1lcmljKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3N0cmlu
Zyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19vYmplY3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9lbnRlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jaGVja190ZHopOgorICAg
ICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wdXRfZ2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9z
ZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0
ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29w
X3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0
X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVU
aHVuayk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3B1dF90b19hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9pbnRl
cm5hbF9maWVsZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcHJvcGVydHlfZW51
bWVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0V3JpdGVCYXJyaWVyKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaml0L0pTSW50ZXJmYWNlSklULmg6Cisg
ICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OnBvcFRodW5r
U3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOgorICAgICAgICAqIGpp
dC9UaHVua0dlbmVyYXRvcnMuaDoKKwogMjAyMS0xMS0wMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBh
cHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHNvbWUgdW51c2VkIEhlYXAgZmllbGRzLgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlYzU2YzEwZWFhMGU0ZjA2YTJlMzBlM2FhYjY0
NmEwZjBkYmI2OGM4Li44OTBiNTBjNjY3OGU2NDhhNDEwNGI5ZDZkZTAyNzRlNGI5NGVlMmRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDc3OCw3ICs0Nzc4LDYgQEAKIAkJQTdC
RkYzQkYxNzk4Njg5NDAwMDJGNDYyIC8qIERGR0ZpbHRyYXRpb25SZXN1bHQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRmlsdHJhdGlvblJlc3VsdC5oOyBwYXRoID0gZGZn
L0RGR0ZpbHRyYXRpb25SZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdD
MEM0QUExNjdDMDhDRDAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU2NyaXB0UmVmLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTdDMEM0QUIxNjdDMDhDRDAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJpdmF0
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NjcmlwdFJlZlByaXZhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTdDMUU4QzgxMTJFNzAxQzAwQTM3Rjk4
IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE3QzFFQUVCMTc5ODdBQjYwMDI5OURCMiAvKiBDTG9vcFN0YWNrSW5saW5l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDTG9vcFN0YWNrSW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0MxRUFFQzE3OTg3QUI2MDAyOTlEQjIg
LyogU3RhY2tWaXNpdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbGluZUVu
ZGluZyA9IDA7IHBhdGggPSBTdGFja1Zpc2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBN0MxRUFFRDE3OTg3QUI2MDAyOTlEQjIgLyogU3RhY2tWaXNpdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YWNrVmlzaXRvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNjQwNCw3ICs2NDAzLDYgQEAKIAkJCQk3MjZCOTFBRjI2NTgxNjUz
MDA4RTZGODIgLyogSklUUGxhbi5oICovLAogCQkJCTcyMTMxQkY2MjY1ODdFRjIwMDcxMTRDRiAv
KiBKSVRQbGFuU3RhZ2UuaCAqLywKIAkJCQk4NkNDODVDMzBFRTdBODk0MDAyODg2ODIgLyogSklU
UHJvcGVydHlBY2Nlc3MuY3BwICovLAotCQkJCUE3QzFFOEM4MTEyRTcwMUMwMEEzN0Y5OCAvKiBK
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCAqLywKIAkJCQlGRTNBMDZCODFDMTEwM0Q5MDAzOTBG
REQgLyogSklUUmlnaHRTaGlmdEdlbmVyYXRvci5jcHAgKi8sCiAJCQkJRkUzQTA2QjkxQzExMDNE
OTAwMzkwRkREIC8qIEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCAqLywKIAkJCQk3MjEzMUJGMzI2
NTg3RUYyMDA3MTE0Q0YgLyogSklUU2FmZXBvaW50LmNwcCAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dAppbmRleCBkZDhjYjYyNzI0MWJlODhjZWVmMDc0NTljODVlZjNjOGE5ZjhjODM3Li4w
NTNmMzFjYzJjOTkxMDM5MTI4ZGU4Yzg2ZjcyOWNkMjc4MWMzNWFlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXMudHh0CkBAIC02NTksNyArNjU5LDYgQEAgaml0L0pJVE9wY29kZXMzMl82NC5jcHAK
IGppdC9KSVRPcGVyYXRpb25zLmNwcAogaml0L0pJVFBsYW4uY3BwCiBqaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCi1qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKIGppdC9KSVRSaWdodFNo
aWZ0R2VuZXJhdG9yLmNwcAogaml0L0pJVFNhZmVwb2ludC5jcHAKIGppdC9KSVRTaXplU3RhdGlz
dGljcy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCmlu
ZGV4IDI0NGYyMjI3OTJjNzBmODFhZDA3NzEwN2ExNjYzMzJkYzczMWVmMGYuLjQ5ZWVmNDcwYThi
NTUxMmVlODE1NWY5OGE1Zjk0NjQ5ZWVmMmQ0NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaApAQCAtMjc2LDcgKzI3NiwxNyBAQCBwdWJsaWM6CiAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKHZhbHVlLnBheWxvYWQoKSksIHJlZ3MucGF5bG9hZEdQUigp
KTsKICNlbmRpZgogICAgIH0KLSAgICAKKworICAgIHZvaWQgc3RvcmVWYWx1ZShKU1ZhbHVlIHZh
bHVlLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAg
IHN0b3JlNjQoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3MpOworI2VsaWYg
VVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgc3RvcmUzMihJbW0zMih2YWx1ZS50YWcoKSksIGFk
ZHJlc3Mud2l0aE9mZnNldChUYWdPZmZzZXQpKTsKKyAgICAgICAgc3RvcmUzMihJbW0zMih2YWx1
ZS5wYXlsb2FkKCkpLCBhZGRyZXNzLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCkpOworI2VuZGlm
CisgICAgfQorCiAgICAgdm9pZCBzdG9yZVRydXN0ZWRWYWx1ZShKU1ZhbHVlIHZhbHVlLCBBZGRy
ZXNzIGFkZHJlc3MpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0xMDQ1LDYgKzEwNTUs
MjQgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCisgICAgdm9pZCBpc051bGwoSlNWYWx1ZVJl
Z3MgcmVncywgR1BSUmVnIGRzdCkKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAg
Y29tcGFyZTY0KEVxdWFsLCByZWdzLnBheWxvYWRHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlTnVsbCksIGRzdCk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBjb21w
YXJlMzIoRXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFn
KSwgZHN0KTsKKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgaXNOb3ROdWxsKEpTVmFsdWVSZWdz
IHJlZ3MsIEdQUlJlZyBkc3QpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGNv
bXBhcmU2NChOb3RFcXVhbCwgcmVncy5wYXlsb2FkR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZU51bGwpLCBkc3QpOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgY29t
cGFyZTMyKE5vdEVxdWFsLCByZWdzLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVs
bFRhZyksIGRzdCk7CisjZW5kaWYKKyAgICB9CisKICAgICBKdW1wIGJyYW5jaElmTnVsbChHUFJS
ZWcgZ3ByKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMTExNCw2ICsxMTQyLDE3IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3RQdHIoWmVybywgc3RyaW5nSW1wbEdQ
UiwgVHJ1c3RlZEltbTMyKEpTU3RyaW5nOjppc1JvcGVJblBvaW50ZXIpKTsKICAgICB9CiAKKyAg
ICB2b2lkIGVtaXRUdXJuVW5kZWZpbmVkSW50b051bGwoSlNWYWx1ZVJlZ3MgcmVncykKKyAgICB7
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgc3RhdGljX2Fzc2VydCgoSlNWYWx1ZTo6VmFs
dWVVbmRlZmluZWQgJiB+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSA9PSBKU1ZhbHVlOjpWYWx1ZU51
bGwpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHJlZ3MucGF5bG9hZEdQUigpKTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHN0
YXRpY19hc3NlcnQoKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyB8IDEpID09IEpTVmFsdWU6Ok51bGxU
YWcpOworICAgICAgICBvcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVncy50YWdHUFIoKSk7CisjZW5k
aWYKKyAgICB9CisKICAgICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9yQnl0ZU9mZnNldChwdHJk
aWZmX3QgYnl0ZU9mZnNldCkKICAgICB7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBieXRlT2Zmc2V0KTsKQEAgLTE4NDUsNiArMTg4NCw0OSBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGJvb2wgc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNy
b1NjcmF0Y2hSZWdpc3RlcigpOwogI2VuZGlmCiAKKyAgICAvLyBDaGVja3MgdGhhdCB0aGUgZ2l2
ZW4gbGlzdCBvZiBHUFJSZWdzIGFuZCBKU1ZhbHVlUmVncyBkbyBub3Qgb3ZlcmxhcC4gVXNlIHRo
aXMgaW4gc3RhdGljCisgICAgLy8gYXNzZXJ0aW9ucyB0byBlbnN1cmUgdGhhdCByZWdpc3RlciBh
bGlhc2VzIGxpdmUgYXQgdGhlIHNhbWUgcG9pbnQgZG8gbm90IG1hcCB0byB0aGUgc2FtZQorICAg
IC8vIGFyY2hpdGVjdHVyYWwgcmVnaXN0ZXIuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEFy
Z3M+CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5vT3ZlcmxhcChBcmdzLi4uIGFyZ3MpIHsg
cmV0dXJuIG5vT3ZlcmxhcEltcGwoMCwgYXJncy4uLik7IH0KKworcHJpdmF0ZToKKyAgICAvLyBC
YXNlIGNhc2UKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbm9PdmVybGFwSW1wbCh1aW50NjRfdCkgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgLy8gR1BSUmVnIGNhc2UKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbm9PdmVybGFwSW1wbCh1aW50NjRfdCB1c2VkLCBSZWdpc3Rl
cklEIGdwciwgQXJncy4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbWFzayA9IG5v
T3ZlcmxhcEltcGxSZWdNYXNrKGdwcik7CisgICAgICAgIGlmICh1c2VkICYgbWFzaykKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG5vT3ZlcmxhcEltcGwodXNlZCB8
IG1hc2ssIGFyZ3MuLi4pOworICAgIH0KKworICAgIC8vIEpTVmFsdWVSZWdzIGNhc2UKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbm9P
dmVybGFwSW1wbCh1aW50NjRfdCB1c2VkLCBKU1ZhbHVlUmVncyBqc3IsIEFyZ3MuLi4gYXJncykK
KyAgICB7CisgICAgICAgIHVuc2lnbmVkIG1hc2sgPSBub092ZXJsYXBJbXBsUmVnTWFzayhqc3Iu
cGF5bG9hZEdQUigpKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBtYXNrIHw9IG5v
T3ZlcmxhcEltcGxSZWdNYXNrKGpzci50YWdHUFIoKSk7CisjZW5kaWYKKyAgICAgICAgaWYgKHVz
ZWQgJiBtYXNrKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbm9P
dmVybGFwSW1wbCh1c2VkIHwgbWFzaywgYXJncy4uLik7CisgICAgfQorCisgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBub092ZXJsYXBJbXBsUmVnTWFzayhSZWdpc3RlcklEIGdwcikKKyAg
ICB7CisgICAgICAgIGlmIChncHIgPT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIHJldHVy
biAwVUxMOworICAgICAgICB1bnNpZ25lZCBiaXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZ3By
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYml0IDwgc2l6ZW9mKHVpbnQ2NF90KSAqIENIQVJf
QklUKTsKKyAgICAgICAgcmV0dXJuIDFVTEwgPDwgYml0OworICAgIH0KKwogcHJvdGVjdGVkOgog
ICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBs
KEdQUlJlZyBjYWxsZWVTYXZlc0J1ZmZlcik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvR1BSSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZv
LmgKaW5kZXggYjIwZTMzMWI1NWNmMzJhMTI5MTcxOTIwMDUzZTg1YzQ0ZDVhMTNkOS4uM2Y4ODNl
NWUxMWU2M2MxNjg0ZmVmNDlhYTQzZjJiNjIzMzQ2MzQzZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9HUFJJbmZvLmgKQEAgLTkyMCwxMyArOTIwLDQzIEBAIHB1YmxpYzoKIAogI2VuZGlmIC8vIENQ
VShSSVNDVjY0KQogCisvLyBUbyBtYWtlIHNvbWUgY29kZSBnZW5lcmljIG92ZXIgYm90aCBKU1ZB
TFVFNjQgYW5kIEpTVkFMVUUzMl82NCBwbGF0Zm9ybXMsIHdlIHVzZSBzdGFuZGFyZCBuYW1lcwor
Ly8gZm9yIGNlcnRhaW4gSlNWYWx1ZVJlZ3MgaW5zdGFuY2VzLiBPbiBKU1ZBTFVFNjQsIGEgSlNW
YWx1ZVJlZ3MgY29ycmVzcG9uZHMgdG8gYSBzaW5nbGUgNjQtYml0CisvLyBhcmNoaXRlY3R1cmFs
IEdQUiwgd2hpbGUgb24gSlNWQUxVRTMyXzY0LCBhIEpTVmFsdWVSZWdzIGNvcnJlc3BvbmRzIHRv
IGEgcGFpciBvZiAzMi1iaXQKKy8vIGFyY2hpdGVjdHVyYWwgR1BScy4gTmV2ZXJ0aGVsZXNzLCBh
IGxvdCBvZiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0YXJnZXRzIGNhbiBiZSBhYnN0cmFj
dGVkCisvLyBvdmVyIHVzaW5nIHRoZSBmb2xsb3dpbmcgYWxpYXNlcy4gU2VlIEFzc2VtYmx5SGVs
cGVyOjpub092ZXJsYXAgZm9yIGNhdGNoaW5nIGNvbmZsaWN0aW5nIHJlZ2lzdGVyCisvLyBhbGlh
c2luZyBzdGF0aWNhbGx5LgorY2xhc3MgSlNSSW5mbyB7CitwdWJsaWM6CisgICAgLy8gVGVtcG9y
YXJ5IHJlZ2lzdGVycy4KKyAgICAvLyBPbiBKU1ZBTFVFNjQsIGpzUmVnVHsyKm4rMX17MipufSBh
bHdheXMgbWFwcyBvbmUtdG8tb25lIHRvIEdQUiByZWdUezIqbn0KKyAgICAvLyBPbiBKU1ZBTFVF
MzJfNjQsIGpzUmVnVHsyKm4rMX17MipufSBhbHdheXMgbWFwcyB0byB0aGUgR1BSIHBhaXIgcmVn
VHsyKm4rMX0gLyByZWdUezIqbn0KKyAgICAvLyBUaGlzIG1hcHBpbmcgaXMgZGVsaWJlcmF0ZWx5
IHNpbXBsZSB0byBlYXNlIHJlYXNvbmluZyBhYm91dCBhbGlhc2luZy4gRS5nLjoKKyAgICAvLyBT
ZWVpbmcgJ2pzUmVnVDEwJyBpbmRpY2F0ZXMgdGhhdCBpbiBnZW5lcmFsIGJvdGggJ3JlZ1QxJyBh
bmQgJ3JlZ1QwJyBtYXkgYmUgdXNlZC4KKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHN0YXRpYyBj
b25zdGV4cHIgSlNWYWx1ZVJlZ3MganNSZWdUMTAgeyBHUFJJbmZvOjpyZWdUMCB9OworICAgIHN0
YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MganNSZWdUMzIgeyBHUFJJbmZvOjpyZWdUMiB9Owor
I2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBzdGF0aWMgY29uc3RleHByIEpTVmFsdWVSZWdz
IGpzUmVnVDEwIHsgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwIH07CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBqc1JlZ1QzMiB7IEdQUkluZm86OnJlZ1QzLCBHUFJJbmZv
OjpyZWdUMiB9OworI2VuZGlmCisKKyAgICAvLyBSZXR1cm4gdmFsdWUgcmVnaXN0ZXIKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmV0dXJuVmFs
dWVKU1IgeyBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiB9OworI2VsaWYgVVNFKEpTVkFMVUUzMl82
NCkKKyAgICBzdGF0aWMgY29uc3RleHByIEpTVmFsdWVSZWdzIHJldHVyblZhbHVlSlNSIHsgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiB9OworI2VuZGlm
Cit9OworCiAvLyBUaGUgYmFzZWxpbmUgSklUIHVzZXMgImFjY3VtdWxhdG9yIiBzdHlsZSBleGVj
dXRpb24gd2l0aCByZWdUMCAoZm9yIDY0LWJpdCkKIC8vIGFuZCByZWdUMCArIHJlZ1QxIChmb3Ig
MzItYml0KSBzZXJ2aW5nIGFzIHRoZSBhY2N1bXVsYXRvciByZWdpc3RlcihzKSBmb3IKIC8vIHBh
c3NpbmcgcmVzdWx0cyBvZiBvbmUgb3Bjb2RlIHRvIHRoZSBuZXh0LiBIZW5jZToKLUNPTVBJTEVf
QVNTRVJUKEdQUkluZm86OnJlZ1QwID09IEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZWdUMF9t
dXN0X2VxdWFsX3JldHVyblZhbHVlR1BSKTsKK3N0YXRpY19hc3NlcnQoR1BSSW5mbzo6cmVnVDAg
PT0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi1DT01Q
SUxFX0FTU0VSVChHUFJJbmZvOjpyZWdUMSA9PSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIHJl
Z1QxX211c3RfZXF1YWxfcmV0dXJuVmFsdWVHUFIyKTsKK3N0YXRpY19hc3NlcnQoR1BSSW5mbzo6
cmVnVDEgPT0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKICNlbmRpZgorc3RhdGljX2Fzc2Vy
dChKU1JJbmZvOjpqc1JlZ1QxMCA9PSBKU1JJbmZvOjpyZXR1cm5WYWx1ZUpTUik7CiAKIGlubGlu
ZSBHUFJSZWcgZXh0cmFjdFJlc3VsdChHUFJSZWcgcmVzdWx0KSB7IHJldHVybiByZXN1bHQ7IH0K
ICNpZiBVU0UoSlNWQUxVRTY0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IDkyOTQy
NDYwNzM0MDA5MTFiNmMzNTdjNzhhNGEwYzZhNzRlOWFhZDQuLjIyOGNmODZlMzcyYjhkOTVjODcz
Y2IwNTc0ZTQwMDE0OTYxZmQ5MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTY0
NCw5ICs2NDQsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZGVsX2J5X3ZhbCkKICAgICAgICAgREVGSU5FX1NMT1dD
QVNFX09QKG9wX2RlbF9ieV9pZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3N1YikK
LSNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9P
UChvcF9nZXRfZnJvbV9zY29wZSkKLSNlbmRpZgogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Ao
b3BfcHV0X3RvX3Njb3BlKQogCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRv
cl9vcGVuKQpAQCAtMTAxOSwxMSArMTAxNiw3IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICBtX2pp
dENvZGUtPm1faml0Q29kZU1hcCA9IGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXplKCk7CiAgICAg
bV9qaXRDb2RlLT5hZG9wdE1hdGhJQ3MobV9tYXRoSUNzKTsKICAgICBtX2ppdENvZGUtPm1fY29u
c3RhbnRQb29sID0gV1RGTW92ZShtX2NvbnN0YW50UG9vbCk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICBtX2ppdENvZGUtPm1faXNTaGFyZWFibGUgPSBtX2lzU2hhcmVhYmxlOwotI2Vsc2UKLSAg
ICBtX2ppdENvZGUtPm1faXNTaGFyZWFibGUgPSBmYWxzZTsKLSNlbmRpZgogCiAgICAgaWYgKEpJ
VEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2Rl
IGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fdW5saW5rZWRDb2RlQmxvY2ssIHJlc3VsdC5leGVj
dXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVN
ZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CkBAIC0xMDgwLDcgKzEwNzMsNiBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpCiAgICAgfQogCiAgICAgaWYg
KCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKSB7Ci0gICAgICAgIG1fZXhjZXB0aW9uSGFuZGxl
ciA9IGxhYmVsKCk7CiAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmxpbmsodGhpcyk7CiAKICAg
ICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50
b3BFbnRyeUZyYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IGRlMmM1Y2U3NzBiYmQ1
OTNiN2FlNWZkMWE2NTI2NzM4OTQzZGQ5YTEuLjAzNWU2NmQ3OTk1MjRlMmZhODIyZTEyMWM0ZTI5
NmI4ZDBjNjhiMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtMjU0LDcgKzI1NCwxMSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBsb2FkQ29uc3RhbnQodW5zaWduZWQgY29u
c3RhbnRJbmRleCwgR1BSUmVnKTsKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGxvYWRHbG9i
YWxPYmplY3QoR1BSUmVnKTsKLSAgICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmly
dHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworICAgICAgICB2b2lkIGxvYWRDb2RlQmxvY2tDb25zdGFu
dChWaXJ0dWFsUmVnaXN0ZXIsIEpTVmFsdWVSZWdzKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQor
ICAgICAgICB2b2lkIGxvYWRDb2RlQmxvY2tDb25zdGFudFBheWxvYWQoVmlydHVhbFJlZ2lzdGVy
LCBSZWdpc3RlcklEKTsKKyAgICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnRUYWcoVmly
dHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKTsKKyNlbmRpZgogCiAgICAgICAgIHZvaWQgZW1pdFB1
dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQgPSByZWdUMCk7CiAKQEAg
LTM1MSw2ICszNTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZW51bSBGaW5hbE9iamVj
dE1vZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07CiAKICAgICAgICAgdm9pZCBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRzdCk7
CisgICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoVmlydHVhbFJlZ2lz
dGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpOwogICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3Mgc3JjKTsKICAgICAgICAgdm9p
ZCBlbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyLCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdp
c3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7CiAKQEAgLTM2MSwxMiArMzY2LDkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgZ2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1
YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFZpcnR1YWxSZWdpc3RlciYgb3As
IGludDMyX3QmIGNvbnN0YW50KTsKIAogICAgICAgICB2b2lkIGVtaXRMb2FkRG91YmxlKFZpcnR1
YWxSZWdpc3RlciwgRlBSZWdpc3RlcklEIHZhbHVlKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZFRh
ZyhWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnKTsKLSAgICAgICAgdm9pZCBlbWl0TG9h
ZFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQpOwogCi0gICAgICAg
IHZvaWQgZW1pdExvYWQoY29uc3QgSlNWYWx1ZSYgdiwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVy
SUQgcGF5bG9hZCk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWQoVmlydHVhbFJlZ2lzdGVyLCBSZWdp
c3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJh
bWVSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgZW1pdExvYWQyKFZpcnR1YWxSZWdpc3RlciwgUmVn
aXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lz
dGVySUQgdGFnMiwgUmVnaXN0ZXJJRCBwYXlsb2FkMik7CisgICAgICAgIHZvaWQgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0
ZXJJRCBwYXlsb2FkKTsKKyAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKFZp
cnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KTsKIAogICAgICAgICB2b2lkIGVtaXRT
dG9yZShWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQs
IFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAgdm9pZCBlbWl0
U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRl
eElzSW50MzIgPSBmYWxzZSk7CkBAIC0zODcsNyArMzg5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCk7Ci0gICAgICAgIHZv
aWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoVmlydHVhbFJlZ2lzdGVyIHNyYzEsIFJlZ2lzdGVy
SUQgZHN0MSwgVmlydHVhbFJlZ2lzdGVyIHNyYzIsIFJlZ2lzdGVySUQgZHN0Mik7CiAgICAgICAg
IHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3Rl
cklEIGZyb20gPSByZWdUMCk7CiAgICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVn
aXN0ZXIgZHN0LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgLyogb25seSB1c2VkIGluIEpTVmFs
dWUzMl82NCAqLyA9IGZhbHNlKQogICAgICAgICB7CkBAIC02NDcsOSArNjQ4LDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25z
dCBJbnN0cnVjdGlvbiopOwotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSNlbmRpZgogICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKIAogICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgU2xvd1BhdGhG
dW5jdGlvbik7CkBAIC02NzEsMjEgKzY2OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2
b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBH
UFJSZWcpOwogICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlLCBH
UFJSZWcgc2NyYXRjaEdQUik7Ci0gICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1
YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVj
dGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwotICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0
cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJl
U2xvdCk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBv
aW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsKLSAgICAgICAgdm9pZCBlbWl0R2V0VmFy
RnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnKTsKLSNlbHNlCi0g
ICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJh
bmQsIEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkKTsKLSAgICAgICAgdm9pZCBlbWl0R2V0VmFy
RnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnIHRhZywgR1BSUmVnIHBheWxvYWQp
OwotI2VuZGlmCi0gICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVy
IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRl
KFdhdGNocG9pbnRTZXQqKTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50
KEdQUlJlZyBwb2ludGVyVG9TZXQpOwotICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJs
ZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQq
KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiog
YWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kiop
OwotICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwg
dWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCop
OwogCiAgICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwogCkBA
IC03MzMsMTQgKzcxOCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzRmFsc2V5R2VuZXJhdG9y
KFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IoVk0mKTsKLQorI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJik7CiAgICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcmVz
b2x2ZV9zY29wZUdlbmVyYXRvcihWTSYpOwogICAgICAgICB0ZW1wbGF0ZSA8UmVzb2x2ZVR5cGU+
CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdl
bmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYpOwogICAgICAgICB0ZW1wbGF0ZSA8UmVzb2x2
ZVR5cGU+CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhWTSYpOwotI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCiAgICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKICAgICAgICAgewpAQCAtOTg3LDkgKzk3MSw2IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzOwog
ICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjazsK
LSNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIExhYmVsIG1fZXhjZXB0aW9u
SGFuZGxlcjsKLSNlbmRpZgogCiAgICAgICAgIHVuc2lnbmVkIG1fZ2V0QnlJZEluZGV4IHsgVUlO
VF9NQVggfTsKICAgICAgICAgdW5zaWduZWQgbV9nZXRCeVZhbEluZGV4IHsgVUlOVF9NQVggfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCmluZGV4IDhmMWE3
YzViODM0NjEwYWEwYjhhZmM4MzE3YjkxY2RlMDE3NGU2YjMuLjhmNGQ4MGI5OWNmYzllOTFmZTIz
M2Q0YmU5MjZmNTYzN2Y2NmVjNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQXJpdGhtZXRpYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRB
cml0aG1ldGljLmNwcApAQCAtMjEwLDcgKzIxMCw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNp
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhv
cDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwg
cmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7CiAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQocmVnVDEpOwogCkBAIC0yMzgsNyArMjM5LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVu
c2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG8K
ICAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKICAg
ICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QxLCBJbW0zMihv
cDFpbW0pKSwgdGFyZ2V0KTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIs
IHJlZ1QxKTsKICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCByZWdU
MSksIHRhcmdldCk7CiAgICAgfQogfQpAQCAtMjY0LDcgKzI2Niw4IEBAIHZvaWQgSklUOjplbWl0
X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlyCiAgICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50
KG9wMSk7CiAgICAgICAgIGNvbXBhcmUzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QwLCBJbW0z
MihvcDFpbW0pLCByZWdUMCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByZWdUMSk7CiAgICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCByZWdUMSwgcmVn
VDApOwogICAgIH0KICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OwpAQCAtNDIyLDcgKzQyNSw4IEBAIHZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEFTU0VSVChyZWdUNCAhPSBlZHgpOwogICAg
IEFTU0VSVChyZWdUNCAhPSBlY3gpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3Ax
LCByZWdUNCwgb3AyLCBlY3gpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdU
NCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGVjeCk7CiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KHJlZ1Q0KTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoZWN4
KTsKIApAQCAtNDgwLDcgKzQ4NCw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvCiAKICAgICAv
LyBDaGFyYWN0ZXIgbGVzcy4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsK
LSAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMSwgcmVnVDApOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEsIHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAgICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOwogICAgICAg
ICBlbWl0TG9hZENoYXJhY3RlclN0cmluZyhyZWdUMCwgcmVnVDAsIGZhaWx1cmVzKTsKQEAgLTQ4
OSw3ICs0OTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpbwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewotICAgICAgICBlbWl0
TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AxLCByZWdUMSwgcmVnVDApOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwo
cmVnVDEpKTsKICAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7CiAgICAgICAgIGVtaXRMb2FkQ2hh
cmFjdGVyU3RyaW5nKHJlZ1QwLCByZWdUMCwgZmFpbHVyZXMpOwpAQCAtNDk4LDE1ICs1MDIsMTYg
QEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW8KICAgICAgICAgcmV0dXJuOwogICAgIH0gCiAgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgZW1pdExvYWQob3AyLCBy
ZWdUMywgcmVnVDIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDMs
IHJlZ1QyKTsKICAgICAgICAgbm90SW50MzJPcDIuYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmVn
VDMpKTsKICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1Qy
LCBJbW0zMihnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCkpKSwgdGFyZ2V0KTsKICAg
ICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdExv
YWQob3AxLCByZWdUMSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgcmVnVDEsIHJlZ1QwKTsKICAgICAgICAgbm90SW50MzJPcDEuYXBwZW5kKGJyYW5jaElmTm90
SW50MzIocmVnVDEpKTsKICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJlZ1Qw
LCBJbW0zMihnZXRDb25zdGFudE9wZXJhbmQob3AyKS5hc0ludDMyKCkpKSwgdGFyZ2V0KTsKICAg
ICB9IGVsc2UgewotICAgICAgICBlbWl0TG9hZDIob3AxLCByZWdUMSwgcmVnVDAsIG9wMiwgcmVn
VDMsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCBy
ZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMywgcmVnVDIp
OwogICAgICAgICBub3RJbnQzMk9wMS5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdUMSkpOwog
ICAgICAgICBub3RJbnQzMk9wMi5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdUMykpOwogICAg
ICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsK
QEAgLTUzMywxMyArNTM4LDE0IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1
bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsCiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0
TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCByZWdUMywgcmVnVDIpOwogICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29u
ZGl0aW9uKSwgcmVnVDIsIEltbTMyKGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIoKSkp
LCB0YXJnZXQpOwogICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewot
ICAgICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCByZWdUMSwgcmVnVDApOwogICAgICAgICBhZGRKdW1wKGJyYW5jaDMy
KGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKGdldENvbnN0YW50T3BlcmFuZChvcDIpLmFzSW50MzIo
KSkpLCB0YXJnZXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRMb2FkMihvcDEsIHJlZ1Qx
LCByZWdUMCwgb3AyLCByZWdUMywgcmVnVDIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgcmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIHJlZ1QzLCByZWdUMik7CiAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBy
ZWdUMCwgcmVnVDIpLCB0YXJnZXQpOwogICAgIH0KIH0KQEAgLTU1MywxMyArNTU5LDE0IEBAIHZv
aWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFJlbGF0aW9uYWxDb25kaXRpCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2Rl
Lm1fcmhzOwogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAg
ZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICAgICAgY29tcGFyZTMyKGNvbW11dGUoY29uZGl0
aW9uKSwgcmVnVDIsIEltbTMyKGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIoKSksIHJl
Z1QwKTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAg
ICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwg
cmVnVDAsIEltbTMyKGdldENvbnN0YW50T3BlcmFuZChvcDIpLmFzSW50MzIoKSksIHJlZ1QwKTsK
ICAgICB9IGVsc2UgewotICAgICAgICBlbWl0TG9hZDIob3AxLCByZWdUMSwgcmVnVDAsIG9wMiwg
cmVnVDMsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1Qx
LCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMywgcmVn
VDIpOwogICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsK
ICAgICB9CiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKQEAgLTU3NSw4ICs1ODIsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmlu
c3RydWN0aW9uLCBEb3VibGVDb25kaXRpbwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAotICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZChvcDIsIHJl
Z1QzLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdU
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJl
Z1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5v
blplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKQEAgLTYwNCw3ICs2MTEsNyBAQCB2b2lk
IEpJVDo6ZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwg
T3BlcmFuZFR5cGVzIHR5cGVzLAogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJv
dmUsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwogCiAgICAgICAg
IGlmICghb3AySXNJblJlZ2lzdGVycykKLSAgICAgICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMs
IHJlZ1QyKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMywg
cmVnVDIpOwogCiAgICAgICAgIEp1bXAgZG91YmxlT3AyID0gYnJhbmNoMzIoQmVsb3csIHJlZ1Qz
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSk7CiAKQEAgLTY2OCw3ICs2NzUsNyBA
QCB2b2lkIEpJVDo6ZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVj
dGlvbiwgT3BlcmFuZFR5cGVzIHR5cGVzLAogICAgICAgICBBU1NFUlQob3AySXNJblJlZ2lzdGVy
cyk7CiAKICAgICAgICAgaWYgKCFvcDFJc0luUmVnaXN0ZXJzKQotICAgICAgICAgICAgZW1pdExv
YWRQYXlsb2FkKG9wMSwgcmVnVDApOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
clBheWxvYWQob3AxLCByZWdUMCk7CiAKICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVn
VDAsIGZwUmVnVDApOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VEFyaXRobWV0aWMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMzMl82NC5jcHAKaW5kZXggMjI1ZTE0YTFiZTA4YWJkNTUwYWQ2M2M0NWViNTFhMWM0NjJl
MWMyMC4uMmRkYmNiMzA2OGJlZDliNzU4NzQ1ODEzZGM1NTQzZWVlOThkNWEzYyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcApAQCAtNDcs
NyArNDcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwog
ICAgIAotICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICAKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdEludDMyKHJlZ1QxKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4s
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoMCkpKTsKQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbmM+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCi0gICAgZW1pdExvYWQoc3Jj
RHN0LCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBy
ZWdUMSwgcmVnVDApOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RJbnQzMihyZWdUMSkp
OwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSks
IHJlZ1QwKSk7CkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3Qg
PSBieXRlY29kZS5tX3NyY0RzdDsKIAotICAgIGVtaXRMb2FkKHNyY0RzdCwgcmVnVDEsIHJlZ1Qw
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDEsIHJlZ1QwKTsKIAog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIocmVnVDEpKTsKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKaW5kZXggMDkxOTkxNTg0NjhjMGZlMTAyYjVkZmJm
YTJiZTRmZTE3MzE5N2UyYi4uOWY0NDE1ZTI5YWRjMmIwOWM3ZWE5OGFjNmYzOGY1YzE5MDA0OTFj
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCkBAIC00MywxOCArNDMsMTIg
QEAKIG5hbWVzcGFjZSBKU0MgewogCiBuYW1lc3BhY2UgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHJldHVyblZhbHVlSlNSIHsgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIgfTsKLSAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgY2FsbGVlSlNSIHsgR1BSSW5m
bzo6cmVnVDAgfTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgY29uc3RleHByIEpTVmFs
dWVSZWdzIHJldHVyblZhbHVlSlNSIHsgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiB9OwotICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBjYWxsZWVKU1Ig
eyBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDAgfTsKLSNlbmRpZgorICAgIGNvbnN0ZXhw
ciBKU1ZhbHVlUmVncyBjYWxsZWVKU1IgPSBKU1JJbmZvOjpqc1JlZ1QxMDsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgc3RhdGljX2Fzc2VydCghcmV0dXJuVmFsdWVKU1IudXNlcyhjYWxsRnJhbWVSZWdpc3Rl
cikpOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKHJldHVyblZhbHVlSlNSLCBjYWxsRnJh
bWVSZWdpc3RlcikpOwogCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gcmV0dXJuVmFsdWVH
UFIgKHJldHVyblZhbHVlR1BSMi9yZXR1cm5WYWx1ZUdQUiBvbiAzMi1iaXQpLgogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwpAQCAtMTY3LDcgKzE2
MSw3IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mCiAgICAgbm90QmlnZ2VzdC5saW5rKHRoaXMp
OwogICAgIAogICAgIC8vIEluaXRpYWxpemUgJ3RoaXMnLgotICAgIGNvbnN0ZXhwciBKU1ZhbHVl
UmVncyB0aGlzSlNSID0gY2FsbGVlSlNSOyAvLyBVc2VkIGFzIHRlbXBvcmFyeSByZWdpc3Rlcgor
ICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyB0aGlzSlNSID0ganNSZWdUMTA7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih0aGlzVmFsdWUsIHRoaXNKU1IpOwogICAgIHN0b3JlVmFsdWUodGhp
c0pTUiwgQWRkcmVzcyhyZWdUNSwgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0
YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKIApAQCAtNDc3LDcgKzQ3MSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uKQogICAgIHVzaW5nIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0SlNSOwog
ICAgIHVzaW5nIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm9HUFI7CiAKLSAgICBz
dGF0aWNfYXNzZXJ0KCFyZXR1cm5WYWx1ZUpTUi51c2VzKHN0dWJJbmZvR1BSKSk7CisgICAgc3Rh
dGljX2Fzc2VydChub092ZXJsYXAocmV0dXJuVmFsdWVKU1IsIHN0dWJJbmZvR1BSKSk7CiAgICAg
c3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUpTUiA9PSBiYXNlSlNSKTsgLy8gT3RoZXJ3aXNlIHdp
bGwgbmVlZCBtb3ZlKHJldHVyblZhbHVlSlNSLCBiYXNlSlNSKQogICAgIHN0YXRpY19hc3NlcnQo
YmFzZUpTUiA9PSByZXN1bHRKU1IpOwogCkBAIC01ODIsNyArNTc2LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiAgICAg
YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKIAogICAgIC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUs
IHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1QwICAocmVnVDEvcmVnVDAgb3IgMzItYml0KQotICAg
IHN0YXRpY19hc3NlcnQoIXJldHVyblZhbHVlSlNSLnVzZXMoc3R1YkluZm9HUFIpKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChyZXN1bHRKU1IsIHN0dWJJbmZvR1BSKSk7CiAKICAgICBj
b25zdGV4cHIgSlNWYWx1ZVJlZ3MgaXRlckNhbGxSZXN1bHRKU1IgPSBkb250Q2xvYmJlckpTUjsK
ICAgICBtb3ZlVmFsdWVSZWdzKHJldHVyblZhbHVlSlNSLCBpdGVyQ2FsbFJlc3VsdEpTUik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCmluZGV4IGQ2MDJmYzkyNmM5MzI5ZTIx
MmE0ZDUwN2ZkODZkMDc4YWJhN2JhMWEuLmUyYWQyYzBkZTZmMGUwMGVlYzU5MzM3YmI4YzA4NGYz
ODJlMjFjZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCkBAIC02NSwx
MiArNjUsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc0tub3duQ2VsbChWaXJ0dWFsUmVn
aXN0ZXIgc3JjKQogQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5k
KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgQVNTRVJUKHNyYy5pc0NvbnN0YW50KCkpOwot
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgcmV0dXJuIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdl
dENvbnN0YW50KHNyYyk7Ci0jZWxzZQogICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgIT0gU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KTsKICAgICByZXR1cm4gbV91bmxpbmtl
ZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSNlbmRpZgogfQogCiBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBW
aXJ0dWFsUmVnaXN0ZXIgZW50cnkpCkBAIC0zOTUsNiArMzkxLDYyIEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKICAgICBzdG9y
ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwogfQogCitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rl
ciBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKK3sKKyAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsg
Ly8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRo
IGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KKyAgICBpZiAoc3Jj
LmlzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAobV9wcm9maWxlZENvZGVCbG9jay0+aXNDb25z
dGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhzcmMpKQorICAgICAgICAgICAgbW92ZVZhbHVl
KG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyksIGRzdCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIGRzdCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3Ioc3JjKSwgZHN0KTsKK30K
KworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgdGFnLCBSZWdp
c3RlcklEIHBheWxvYWQpCit7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIEpTVmFs
dWVSZWdzIHsgdGFnLCBwYXlsb2FkIH0pOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3Rl
cklEIGRzdCkKK3sKKyAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qg
c2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNv
IHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KKyAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkg
eworICAgICAgICBpZiAobV9wcm9maWxlZENvZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxp
bmtlZENvZGVCbG9jayhzcmMpKQorICAgICAgICAgICAgbW92ZShJbW0zMihtX3VubGlua2VkQ29k
ZUJsb2NrLT5nZXRDb25zdGFudChzcmMpLnBheWxvYWQoKSksIGRzdCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudFBheWxvYWQoc3JjLCBkc3QpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGxvYWQzMihwYXlsb2FkRm9yKHNyYyksIGRzdCk7Cit9
CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcoVmly
dHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpCit7CisgICAgQVNTRVJUKG1fYnl0ZWNv
ZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90
L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCisg
ICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgaWYgKG1fcHJvZmlsZWRDb2RlQmxv
Y2stPmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxvY2soc3JjKSkKKyAgICAgICAgICAg
IG1vdmUoSW1tMzIobV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKS50YWcoKSks
IGRzdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudFRh
ZyhzcmMsIGRzdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbG9hZDMyKHRhZ0Zvcihz
cmMpLCBkc3QpOworfQorI2VsaWYgVVNFKEpTVkFMVUU2NCkKK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJ
RCBkc3QpCit7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIEpTVmFsdWVSZWdzIHsg
ZHN0IH0pOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lz
dGVyUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKK3sKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgSlNWYWx1ZVJlZ3MgeyBkc3QgfSk7Cit9CisjZW5k
aWYKKwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRE
b3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQpAQCAtNDA2LDY5
ICs0NTgsMTEgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0
ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiAgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0Zv
cihyZWcpLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRUYWcoVmlydHVh
bFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcpCi17Ci0gICAgaWYgKHJlZy5pc0NvbnN0YW50
KCkpIHsKLSAgICAgICAgbW92ZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQocmVnKS50YWcoKSks
IHRhZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBsb2FkMzIodGFnRm9yKHJlZyks
IHRhZyk7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRQYXlsb2FkKFZpcnR1YWxSZWdp
c3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCkKLXsKLSAgICBpZiAocmVnLmlzQ29uc3RhbnQo
KSkgewotICAgICAgICBtb3ZlKEltbTMyKGdldENvbnN0YW50T3BlcmFuZChyZWcpLnBheWxvYWQo
KSksIHBheWxvYWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbG9hZDMyKHBheWxv
YWRGb3IocmVnKSwgcGF5bG9hZCk7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQoY29u
c3QgSlNWYWx1ZSYgdiwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCkKLXsKLSAg
ICBtb3ZlKEltbTMyKHYucGF5bG9hZCgpKSwgcGF5bG9hZCk7Ci0gICAgbW92ZShJbW0zMih2LnRh
ZygpKSwgdGFnKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBkc3QpCi17Ci0gICAgZW1p
dExvYWQoc3JjLCBkc3QudGFnR1BSKCksIGRzdC5wYXlsb2FkR1BSKCkpOwotfQotCiBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBk
c3QsIEpTVmFsdWVSZWdzIGZyb20pCiB7CiAgICAgZW1pdFN0b3JlKGRzdCwgZnJvbS50YWdHUFIo
KSwgZnJvbS5wYXlsb2FkR1BSKCkpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKFZp
cnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJl
Z2lzdGVySUQgYmFzZSkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVCh0YWcgIT0gcGF5bG9hZCk7Ci0K
LSAgICBpZiAoYmFzZSA9PSBjYWxsRnJhbWVSZWdpc3RlcikgewotICAgICAgICBSRUxFQVNFX0FT
U0VSVChwYXlsb2FkICE9IGJhc2UpOwotICAgICAgICBlbWl0TG9hZFBheWxvYWQocmVnLCBwYXls
b2FkKTsKLSAgICAgICAgZW1pdExvYWRUYWcocmVnLCB0YWcpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKHBheWxvYWQgPT0gYmFzZSkgeyAvLyBhdm9pZCBzdG9tcGluZyBiYXNl
Ci0gICAgICAgIGxvYWQzMih0YWdGb3IocmVnLCBiYXNlKSwgdGFnKTsKLSAgICAgICAgbG9hZDMy
KHBheWxvYWRGb3IocmVnLCBiYXNlKSwgcGF5bG9hZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBsb2FkMzIocGF5bG9hZEZvcihyZWcsIGJhc2UpLCBwYXlsb2FkKTsKLSAgICBsb2Fk
MzIodGFnRm9yKHJlZywgYmFzZSksIHRhZyk7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1pdExv
YWQyKFZpcnR1YWxSZWdpc3RlciByZWcxLCBSZWdpc3RlcklEIHRhZzEsIFJlZ2lzdGVySUQgcGF5
bG9hZDEsIFZpcnR1YWxSZWdpc3RlciByZWcyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQg
cGF5bG9hZDIpCi17Ci0gICAgZW1pdExvYWQocmVnMiwgdGFnMiwgcGF5bG9hZDIpOwotICAgIGVt
aXRMb2FkKHJlZzEsIHRhZzEsIHBheWxvYWQxKTsKLX0KLQogaW5saW5lIHZvaWQgSklUOjplbWl0
U3RvcmUoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5
bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQogewogICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZv
cihyZWcsIGJhc2UpKTsKQEAgLTU1MywzNCArNTQ3LDYgQEAgQUxXQVlTX0lOTElORSBib29sIEpJ
VDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3QKIAogI2Vsc2UgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAotLy8gZ2V0IGFyZyBwdXRzIGFuIGFy
ZyBmcm9tIHRoZSBTRiByZWdpc3RlciBhcnJheSBpbnRvIGEgaC93IHJlZ2lzdGVyCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBz
cmMsIFJlZ2lzdGVySUQgZHN0KQotewotICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBU
aGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2Vu
ZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgotCi0gICAgaWYgKHNyYy5p
c0NvbnN0YW50KCkpIHsKLSAgICAgICAgaWYgKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3Rh
bnRPd25lZEJ5VW5saW5rZWRDb2RlQmxvY2soc3JjKSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0gICAgICAgICAg
ICBtb3ZlKEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIGRzdCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBsb2FkNjQoYWRkcmVzc0ZvcihzcmMpLCBkc3QpOwotfQot
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxS
ZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYywgZHN0LnBheWxvYWRHUFIoKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklE
IGRzdDEsIFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpCi17Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBkc3QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYzIsIGRzdDIpOwotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKIHsKICAg
ICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC03MjUsMTQgKzY5MSwzNCBAQCBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyByZXN1bHQpCiAg
ICAgbG9hZENvbnN0YW50KG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQsIHJlc3VsdCk7CiB9CiAKLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0
ZXIgY29uc3RhbnQsIEdQUlJlZyByZXN1bHQpCitBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIGxv
YWRBZGRyT2ZDb2RlQmxvY2tDb25zdGFudEJ1ZmZlcihKSVQgJmppdCwgR1BSUmVnIGRzdCkKK3sK
KyAgICBqaXQubG9hZFB0cihqaXQuYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCBkc3QpOworICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhkc3QsIENvZGVCbG9jazo6b2Zm
c2V0T2ZDb25zdGFudHNWZWN0b3JCdWZmZXIoKSksIGRzdCk7Cit9CisKK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQs
IEpTVmFsdWVSZWdzIGRzdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0
YW50KCkpOwotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCByZXN1bHQpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIENvZGVCbG9jazo6b2Zmc2V0
T2ZDb25zdGFudHNWZWN0b3JCdWZmZXIoKSksIHJlc3VsdCk7Ci0gICAgbG9hZFB0cihBZGRyZXNz
KHJlc3VsdCwgY29uc3RhbnQudG9Db25zdGFudEluZGV4KCkgKiBzaXplb2Yodm9pZCopKSwgcmVz
dWx0KTsKKyAgICBsb2FkQWRkck9mQ29kZUJsb2NrQ29uc3RhbnRCdWZmZXIoKnRoaXMsIGRzdC5w
YXlsb2FkR1BSKCkpOworICAgIGxvYWRWYWx1ZShBZGRyZXNzKGRzdC5wYXlsb2FkR1BSKCksIGNv
bnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGRzdCk7CiB9CiAK
KyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvZGVC
bG9ja0NvbnN0YW50UGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQsIFJlZ2lzdGVySUQg
ZHN0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50LmlzQ29uc3RhbnQoKSk7CisgICAg
bG9hZEFkZHJPZkNvZGVCbG9ja0NvbnN0YW50QnVmZmVyKCp0aGlzLCBkc3QpOworICAgIGxvYWQz
MihBZGRyZXNzKGRzdCwgY29uc3RhbnQudG9Db25zdGFudEluZGV4KCkgKiBzaXplb2YoUmVnaXN0
ZXIpICsgUGF5bG9hZE9mZnNldCksIGRzdCk7Cit9CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjps
b2FkQ29kZUJsb2NrQ29uc3RhbnRUYWcoVmlydHVhbFJlZ2lzdGVyIGNvbnN0YW50LCBSZWdpc3Rl
cklEIGRzdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0YW50KCkpOwor
ICAgIGxvYWRBZGRyT2ZDb2RlQmxvY2tDb25zdGFudEJ1ZmZlcigqdGhpcywgZHN0KTsKKyAgICBs
b2FkMzIoQWRkcmVzcyhkc3QsIGNvbnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICogc2l6ZW9mKFJl
Z2lzdGVyKSArIFRhZ09mZnNldCksIGRzdCk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAKaW5kZXggZjg0NDU4NzgwM2MyNjE4YzY4MDM5ODM2Y2VlNmM3YjM0ZmQyYzMw
NC4uNTgwZjI3ZTJmMjUzMTdmZGVjMWEwMzIwYjNhMmUwYmMzNWFhODE2MCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC00NSw4ICs0NSw2IEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLQogdm9pZCBKSVQ6OmVtaXRfb3BfbW92
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCk7CkBAIC01NSwyNiArNTMsMjMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBpZiAobV9wcm9m
aWxlZENvZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhzcmMpKSB7
Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29u
c3RhbnQoc3JjKTsKLSAgICAgICAgICAgIHN0b3JlNjQoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZh
bHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgICAgICBzdG9yZVZhbHVlKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyksIGFkZHJlc3NGb3IoZHN0KSk7CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCByZWdUMCk7
Ci0gICAgICAgICAgICBzdG9yZTY0KHJlZ1QwLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICAg
ICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywganNSZWdUMTApOworICAgICAgICAgICAgc3Rv
cmVWYWx1ZShqc1JlZ1QxMCwgYWRkcmVzc0Zvcihkc3QpKTsKICAgICAgICAgfQotCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBsb2FkNjQoYWRkcmVzc0ZvcihzcmMpLCByZWdUMCk7Ci0g
ICAgc3RvcmU2NChyZWdUMCwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICBsb2FkVmFsdWUoYWRkcmVz
c0ZvcihzcmMpLCBqc1JlZ1QxMCk7CisgICAgc3RvcmVWYWx1ZShqc1JlZ1QxMCwgYWRkcmVzc0Zv
cihkc3QpKTsKIH0KIAotCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEVuZD4oKTsKLSAgICBSRUxFQVNFX0FTU0VSVChyZXR1cm5WYWx1ZUdQUiAh
PSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgc3RhdGljX2Fzc2VydCghcmV0dXJuVmFs
dWVKU1IudXNlcyhjYWxsRnJhbWVSZWdpc3RlcikpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVKU1IpOwogICAgIGVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIHJldCgpOwpAQCAt
ODcsNiArODIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKIH0KIAorCiB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCk7CkBAIC0xMDUsNyArMTAxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3
X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGxvYWQ4
KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkp
LCBzY3JhdGNoUmVnKTsKICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVn
LCBzY3JhdGNoUmVnKTsKICAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIGJveENlbGwocmVzdWx0UmVnLCBqc1Jl
Z1QxMCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwganNSZWdU
MTApOwogCiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIH0KQEAgLTExOSw5ICsxMTYsMTIg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlUmVnKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRz
dCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGJveENlbGwocmV0dXJuVmFsdWVHUFIsIHJldHVyblZh
bHVlSlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVKU1Ip
OwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKwogdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVz
X2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFz
SW5zdGFuY2U+KCk7CkBAIC0yMTAsMTIgKzIxMCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
bnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiop
Ci17Ci0gICAgLy8gVGhpcyBhbHdheXMgZ29lcyB0byBzbG93IHBhdGggc2luY2Ugd2UgZXhwZWN0
IGl0IHRvIGJlIHJhcmUuCi0gICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLX0KLSAgICAKIHZvaWQg
SklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Vt
cHR5PigpOwpAQCAtMjI5LDMzICsyMjMsMzkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHko
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CiB9CiAKKyNlbmRpZgorCiB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2Zf
aXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVm
aW5lZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJy
YW5jaElmQ2VsbChyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwganNS
ZWdUMTApOworICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKGpzUmVnVDEwKTsKIAotICAg
IGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVm
aW5lZCksIHJlZ1QwKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGNvbXBhcmU2NChFcXVhbCwg
anNSZWdUMTAucGF5bG9hZEdQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmlu
ZWQpLCByZWdUMCk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGNvbXBhcmUzMihFcXVh
bCwganNSZWdUMTAudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcp
LCByZWdUMCk7CisjZW5kaWYKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgCiAgICAgaXND
ZWxsLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFu
Y2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgSnVtcCBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGpz
UmVnVDEwLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KDApLCByZWdUMCk7CiAgICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgp
OwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExv
YWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwganNSZWdUMTAucGF5bG9hZEdQUigpLCByZWdUMSwgcmVnVDIpOwogICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKICAgICBjb21wYXJlUHRyKEVxdWFs
LCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKIAogICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgYm94Qm9vbGVhbihyZWdUMCwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5l
ZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNjQs
MTUgKzI2NCwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwganNSZWdUMTApOwogCi0gICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29t
cGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJl
Z1QwKTsKKyAgICBlbWl0VHVyblVuZGVmaW5lZEludG9OdWxsKGpzUmVnVDEwKTsKKyAgICBpc051
bGwoanNSZWdUMTAsIHJlZ1QwKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGJveEJv
b2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
anNSZWdUMTApOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKwogdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwpA
QCAtNDE4LDE1ICs0MjAsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAorI2VuZGlmCisKIHZvaWQgSklUOjplbWl0X29wX3NldF9m
dW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5h
bWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCBh
cmd1bWVudEdQUjEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1l
LCBhcmd1bWVudEdQUjIpOwotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisKKyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0g
ZGVjbHR5cGUob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lKTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+
KCk7CisgICAgY29uc3RleHByIEdQUlJlZyBmdW5jdGlvbkdQUiA9IHByZWZlcnJlZEFyZ3VtZW50
R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIG5hbWVK
U1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAyPigpOworCisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUubV9mdW5jdGlvbiwgZnVuY3Rpb25H
UFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBuYW1lSlNS
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGdsb2JhbE9iamVjdEdQUiwgZnVuY3Rpb25H
UFIsIG5hbWVKU1IpOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKwogdm9pZCBKSVQ6OmVtaXRf
b3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7CkBAIC00NDIsMjEg
KzQ1NCwyNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
KTsKIH0KIAorI2VuZGlmCisKIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNlPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAg
IGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJl
Z3MgdmFsdWUgPSBqc1JlZ1QxMDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9jb25kaXRpb24sIHZhbHVlKTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0g
ICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaDIgPSByZWdUMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQ
UiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7CisgICAgY29uc3RleHByIEdQUlJlZyBn
bG9iYWxPYmplY3RHUFIgPSByZWdUNDsKKyAgICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcCh2YWx1
ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBnbG9iYWxPYmplY3RHUFIpKTsKICAgICBjb25zdGV4cHIg
Ym9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogICAgIGxvYWRH
bG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5
KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQ
UiksIHRhcmdldCk7CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCB2YWx1ZSwgc2Ny
YXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTQ3Myw2ICs0ODgsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6dmFsdWVJc0ZhbHNleUdlbmVyYXRvcihWTSYgdm0pCiAg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdU
MDsKKyAgICBzdGF0aWNfYXNzZXJ0KHZhbHVlID09IGpzUmVnVDEwLnBheWxvYWRHUFIoKSk7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaDIgPSByZWdUMjsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwpAQCAtNTAzLDQ4ICs1MTksNTEgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAg
IEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCBqc1JlZ1QxMCk7CisgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJy
YW5jaElmTm90Q2VsbChqc1JlZ1QxMCk7CiAKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBj
YXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUu
Ci0gICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJv
LCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGpzUmVnVDEwLnBheWxvYWRHUFIoKSwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCkpOworICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGpzUmVnVDEwLnBheWxv
YWRHUFIoKSwgcmVnVDIsIHJlZ1QxKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAg
ICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9i
YWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIG1hc3F1ZXJhZGVz
R2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwogCiAgICAgLy8gTm93IGhhbmRsZSB0aGUg
aW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAogICAgIGlzSW1tZWRpYXRlLmxpbmso
dGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgZW1p
dFR1cm5VbmRlZmluZWRJbnRvTnVsbChqc1JlZ1QxMCk7CisgICAgYWRkSnVtcChicmFuY2hJZk51
bGwoanNSZWdUMTApLCB0YXJnZXQpOwogCiAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7CiAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0
aGlzKTsKLX07Cit9CisKIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51bGw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywganNSZWdU
MTApOworICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoanNSZWdUMTApOwog
CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgo
WmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwotICAgIGVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgIGFkZEp1bXAoYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwg
dGFyZ2V0KTsKKyAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBqc1JlZ1QxMC5wYXlsb2FkR1BS
KCksIHJlZ1QyLCByZWdUMSk7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRk
SnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFs
T2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlh
dGUgPSBqdW1wKCk7CiAKICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1
bmRlZmluZWQgJiBudWxsCiAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1w
KGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICBlbWl0VHVyblVuZGVmaW5lZElu
dG9OdWxsKGpzUmVnVDEwKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmTm90TnVsbChqc1JlZ1QxMCks
IHRhcmdldCk7CiAKICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKIH0KIAorI2lmIFVT
RShKU1ZBTFVFNjQpCisKIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnVuZGVmaW5lZE9yTnVsbD4oKTsKQEAgLTU3Niw3
ICs1OTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoYnl0
ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDEpOworICAgIGxvYWRDb2RlQmxvY2tDb25zdGFu
dChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCBKU1ZhbHVlUmVncyB7IHJlZ1QxIH0pOwogICAg
IGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwogfQogCkBA
IC01ODcsNyArNjA2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBsb2FkQ29kZUJsb2Nr
Q29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDEpOworICAgIGxvYWRDb2Rl
QmxvY2tDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCBKU1ZhbHVlUmVncyB7IHJl
Z1QxIH0pOwogICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwg
cmVnVDAsIHJlZ1QxKTsKICAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMigxKSwgYnl0
ZWNvZGUsIE9wSm5lcVB0cjo6TWV0YWRhdGE6Om9mZnNldE9mSGFzSnVtcGVkKCkpOwogICAgIGFk
ZEp1bXAoanVtcCgpLCB0YXJnZXQpOwpAQCAtNTk3LDcgKzYxNiw4IEBAIHZvaWQgSklUOjplbWl0
X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lk
IEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29k
ZS5tX3JocywgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9s
aHMsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcmhzLCBy
ZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIp
OwogICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CiAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKQEAgLTYwOCwyNiArNjI4LDMwIEBA
IHZvaWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVx
PigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhi
eXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2xocywgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgYWRkSnVtcChicmFuY2gzMihFcXVh
bCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKIH0KIAorI2VuZGlmCisKIHZvaWQgSklUOjplbWl0
X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7Cisg
ICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHZhbHVlID0ganNSZWdUMTA7CiAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdU
MTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2gxID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7CisgICAgc3RhdGlj
X2Fzc2VydChub092ZXJsYXAodmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZ2xvYmFsT2JqZWN0
R1BSKSk7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gdHJ1ZTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7Ci0gICAg
YWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gx
LCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOworICAgIGFkZEp1bXAoYnJhbmNoSWZU
cnV0aHkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJn
ZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJ
c1RydXRoeUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1w
KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC02NDQsNiArNjY4LDcg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnZhbHVlSXNUcnV0
aHlHZW5lcmF0b3IoVk0mIHZtKQogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4
cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgc3RhdGljX2Fzc2VydCh2YWx1ZSA9PSBqc1Jl
Z1QxMC5wYXlsb2FkR1BSKCkpOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdU
MTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CiAgICAgY29uc3RleHBy
IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKQEAgLTY2OCwx
MCArNjkzLDEzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjp2
YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJiB2bSkKIH0KICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisKIHZvaWQgSklUOjplbWl0X29wX25l
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1Qx
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBjb21wYXJl
MzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CkBAIC02ODMsMjEgKzcxMSwyNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5t
X2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2xocywgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
cmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIHJlZ1QxKSwgdGFyZ2V0KTsKIH0KIAorI2VuZGlmCisKIHZvaWQgSklUOjplbWl0X29wX3Ro
cm93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUaHJvdz4oKTsKLSAgICBBU1NFUlQo
cmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOworICAgIHN0YXRpY19hc3NlcnQocmVnVDAgPT0gcmV0
dXJuVmFsdWVHUFIpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvcHlD
YWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFt
ZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7
Ci0gICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIHJlZ1QxLCByZWdUMCk7CisgICAgdXNpbmcgU2xvd09w
ZXJhdGlvbiA9IGRlY2x0eXBlKG9wZXJhdGlvblRocm93KTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+
KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHZhbHVlSlNSID0gcHJlZmVycmVkQXJndW1l
bnRKU1I8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fdmFsdWUsIHZhbHVlSlNSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9i
amVjdEdQUik7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhy
b3csIGdsb2JhbE9iamVjdEdQUiwgdmFsdWVKU1IpOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRs
ZXIodm0oKSk7CiAjZWxzZQogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIg
PSBhcmd1bWVudEdQUjI7CkBAIC03NDAsNiArNzc0LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQog
fQogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCisjaWYgVVNFKEpTVkFMVUU2
NCkKKwogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKQEAgLTc0OCw3ICs3ODQs
OCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhz
OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjMiwgcmVnVDEpOwogCiAjaWYgVVNFKEJJR0lOVDMyKQogICAgIC8qIEF0IGEgaGlnaCBs
ZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKQEAgLTgzMyw3ICs4
NzAsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29k
ZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYzIsIHJlZ1QxKTsKIAogI2lmIFVTRShCSUdJTlQzMikKICAgICAvKiBBdCBh
IGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CkBAIC0x
MDQ4LDYgKzEwODYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFN0b3JlQ2VsbChieXRl
Y29kZS5tX2RzdCwgcmVnVDApOwogfQogCisjZW5kaWYKKwogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dp
dGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoSW1tPigpOwpAQCAt
MTA2MSwxNiArMTEwMSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dp
dGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dp
dGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1
bmxpbmtlZFRhYmxlKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBy
ZWdUMCk7Ci0gICAgYXV0byBub3RJbnQzMiA9IGJyYW5jaElmTm90SW50MzIocmVnVDApOwotICAg
IHN1YjMyKEltbTMyKHVubGlua2VkVGFibGUubV9taW4pLCByZWdUMCk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGpzUmVnVDEwKTsKKyAgICBhdXRvIG5vdEludDMyID0g
YnJhbmNoSWZOb3RJbnQzMihqc1JlZ1QxMCk7CisgICAgc3ViMzIoSW1tMzIodW5saW5rZWRUYWJs
ZS5tX21pbiksIGpzUmVnVDEwLnBheWxvYWRHUFIoKSk7CiAKLSAgICBhZGRKdW1wKGJyYW5jaDMy
KEFib3ZlT3JFcXVhbCwgcmVnVDAsIEltbTMyKGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXpl
KCkpKSwgZGVmYXVsdE9mZnNldCk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGxpbmtlZFRhYmxl
Lm1fY3RpT2Zmc2V0cy5kYXRhKCkpLCByZWdUMSk7Ci0gICAgZmFySnVtcChCYXNlSW5kZXgocmVn
VDEsIHJlZ1QwLCBTY2FsZVB0ciksIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBhZGRKdW1wKGJyYW5j
aDMyKEFib3ZlT3JFcXVhbCwganNSZWdUMTAucGF5bG9hZEdQUigpLCBJbW0zMihsaW5rZWRUYWJs
ZS5tX2N0aU9mZnNldHMuc2l6ZSgpKSksIGRlZmF1bHRPZmZzZXQpOworICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihsaW5rZWRUYWJsZS5tX2N0aU9mZnNldHMuZGF0YSgpKSwgcmVnVDIpOworICAgIGxv
YWRQdHIoQmFzZUluZGV4KHJlZ1QyLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIFNjYWxlUHRyKSwg
cmVnVDIpOworICAgIGZhckp1bXAocmVnVDIsIEpTU3dpdGNoUHRyVGFnKTsKIAogICAgIG5vdElu
dDMyLmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCAmdm0oKSwgcmVnVDAsIHRhYmxlSW5kZXgs
IHVubGlua2VkVGFibGUubV9taW4pOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgJnZtKCksIGpzUmVnVDEwLCB0
YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVl
R1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKQEAgLTEwODksOSArMTEzMCwxMyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5
dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAg
ICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1lbnRHUFIxKTsKLSAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0
Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgdGFi
bGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7CisgICAgdXNpbmcgU2xvd09wZXJhdGlvbiA9
IGRlY2x0eXBlKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUpOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xv
d09wZXJhdGlvbiwgMD4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3Mgc2NydXRpbmVlSlNS
ID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMT4oKTsKKworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBzY3J1dGluZWVKU1IpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3
aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIGdsb2JhbE9iamVjdEdQUiwgc2NydXRpbmVlSlNS
LCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJKdW1wKHJldHVyblZh
bHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKQEAgLTExMDgsOSArMTE1MywxMyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgs
IG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsK
ICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOwotICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3
aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IHRhYmxlSW5kZXgpOworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRp
b25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
Z2xvYmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4o
KTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3Mgc2NydXRpbmVlSlNSID0gcHJlZmVycmVkQXJn
dW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMT4oKTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NydXRpbmVlLCBzY3J1dGluZWVKU1IpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFs
T2JqZWN0R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhV
bmtub3duS2V5VHlwZSwgZ2xvYmFsT2JqZWN0R1BSLCBzY3J1dGluZWVKU1IsIHRhYmxlSW5kZXgp
OwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0KIApAQCAt
MTEyMCwxNSArMTE2OSwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVt
cCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMxLCBqc1JlZ1QxMCk7CisgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5j
aElmTm90Q2VsbChqc1JlZ1QxMCk7CiAKLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAg
ICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFk
ZHJlc3MoanNSZWdUMTAucGF5bG9hZEdQUigpLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAgICAgbW92ZShUcnVz
dGVkSW1tMzIoMCksIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBqdW1wKCk7CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsK
LSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIHJlZ1QyLCByZWdU
MSk7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBh
cmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwpAQCAtMTEzNiwxNCArMTE4NSwxNCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAKICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwogCi0gICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsK
KyAgICBlbWl0VHVyblVuZGVmaW5lZEludG9OdWxsKGpzUmVnVDEwKTsKKyAgICBpc051bGwoanNS
ZWdUMTAsIHJlZ1QwKTsKIAogICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwogICAgIHdh
c05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKIAotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFf
bnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTE1MiwxNSAr
MTIwMSwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1l
ZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjMSwganNSZWdUMTApOworICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENl
bGwoanNSZWdUMTApOwogCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFu
Y2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgSnVtcCBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGpz
UmVnVDEwLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KDEpLCByZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVt
cCgpOwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwganNSZWdUMTAucGF5bG9hZEdQUigpLCByZWdUMiwgcmVnVDEpOwogICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKE5v
dEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKQEAgLTExNjgsMTYgKzEyMTcsMTggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIAogICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CiAKLSAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwor
ICAgIGVtaXRUdXJuVW5kZWZpbmVkSW50b051bGwoanNSZWdUMTApOworICAgIGlzTm90TnVsbChq
c1JlZ1QxMCwgcmVnVDApOwogCiAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CiAgICAg
d2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogCi0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgYm94Qm9vbGVhbihyZWdUMCwganNSZWdUMTApOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCBqc1JlZ1QxMCk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQor
CiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB7CiAgICAgLy8g
RXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0
YW50CkBAIC0xMzA0LDE2ICsxMzU1LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRTdG9yZUNlbGwo
ZHN0LCByZWdUMCk7CiB9CiAKKyNlbmRpZgorCiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIGpzUmVnVDEwKTsKIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGpzUmVnVDEwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmlu
YWxPYmplY3RUeXBlKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKGpzUmVnVDEw
LnBheWxvYWRHUFIoKSwgRmluYWxPYmplY3RUeXBlKSk7CiAgICAgbG9hZDMyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcFRvVGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkU3RydWN0dXJlSUQo
KSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJl
Z1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTEzMjgsNyArMTM4MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgUmVnaXN0ZXJJRCBjYWNoZWRGdW5j
dGlvblJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QzOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlclBheWxvYWQoY2FsbGVlLCBjYWxsZWVSZWcpOwogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVlUmVnKSk7CiAgICAgbG9hZFB0cihBZGRyZXNz
KGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwg
cmFyZURhdGFSZWcpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmFyZURh
dGFSZWcsIFRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpKTsKQEAgLTEzNDcs
OSArMTQwMCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFn
ZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIG11dGF0b3JGZW5jZSgqbV92bSk7CiAgICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0KTsKKyAgICBib3hDZWxsKHJlc3VsdFJlZywganNSZWdUMTApOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIGpzUmVnVDEwKTsKIH0KIAorI2lmIFVT
RShKU1ZBTFVFNjQpCisKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tUZHo+KCk7CkBAIC0xNDA1LDYgKzE0NjEsMTQgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXMKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCisjZW5kaWYgLy8gVVNFKEpTVkFM
VUU2NCkKKwordm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1
Y3Rpb24qKQoreworICAgIC8vIFRoaXMgYWx3YXlzIGdvZXMgdG8gc2xvdyBwYXRoIHNpbmNlIHdl
IGV4cGVjdCBpdCB0byBiZSByYXJlLgorICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Cit9CisKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CkBAIC0xNDE1LDE2ICsxNDc5LDIyIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9y
ID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFu
Y2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIEdQUkluZm86OmFyZ3VtZW50
R1BSMyk7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BS
SW5mbzo6YXJndW1lbnRHUFIzKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1Zh
bHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19CisgICAgdXNpbmcgU2xvd09wZXJhdGlvbiA9IGRlY2x0
eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20pOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xv
YmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4oKTsK
KyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgdmFsdWVKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpT
UjxTbG93T3BlcmF0aW9uLCAxPigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgY29uc3RydWN0b3JH
UFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAyPigpOworICAgIGNvbnN0
ZXhwciBKU1ZhbHVlUmVncyBoYXNJbnN0YW5jZVZhbHVlSlNSID0gcHJlZmVycmVkQXJndW1lbnRK
U1I8U2xvd09wZXJhdGlvbiwgMz4oKTsKIAotI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVKU1IpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJQYXlsb2FkKGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvckdQUik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBoYXNJbnN0YW5jZVZhbHVlSlNS
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgY2FsbE9wZXJh
dGlvbigKKyAgICAgICAgb3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwKKyAgICAgICAgZ2xvYmFs
T2JqZWN0R1BSLCB2YWx1ZUpTUiwgY29uc3RydWN0b3JHUFIsIGhhc0luc3RhbmNlVmFsdWVKU1Ip
OworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIHJldHVyblZhbHVlSlNSKTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVKU1IpOworfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewpAQCAtMTU4OCwxMSArMTY1OCw3IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwotI2Vsc2UKLSAgICBlbWl0
TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKLSNlbmRpZgorICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50
R1BSMSk7CiAgICAgYXV0byBjb25zdGFudCA9IGFkZFRvQ29uc3RhbnRQb29sKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNsLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7CiAgICAgbG9hZENvbnN0YW50
KGNvbnN0YW50LCBhcmd1bWVudEdQUjIpOwogCkBAIC0xNjM0LDEyICsxNzAwLDggQEAgdm9pZCBK
SVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwg
YXJndW1lbnRHUFIxKTsKLSNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2Nv
cGUsIGFyZ3VtZW50R1BSMSk7Ci0jZW5kaWYKIAorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQ
YXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAgICAgYXV0byBjb25zdGFu
dCA9IGFkZFRvQ29uc3RhbnRQb29sKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25FeHBy
LCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9m
dW5jdGlvbkRlY2wpKSk7CiAgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVudEdQUjIp
OwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwpAQCAtMTcwMCwxNCArMTc2
MiwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyKTsKICNlbHNlCiAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFk
YXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5
QWxsb2NhdGlvblByb2ZpbGUoKSwgcmVnVDIpOwotICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVn
VDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDEs
IHJlZ1QwKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIHJlZ1QzLCByZWdUMiwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKIH0KIAotI2lmIFVTRShKU1ZBTFVF
NjQpCi0KIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIG1faXNTaGFyZWFibGUgPSBmYWxzZTsKQEAgLTE3
MTcsNTYgKzE3NzcsNTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRU
eXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlVG9Qcm9maWxlLCBqc1JlZ1QxMCk7CiAKICAgICBK
dW1wTGlzdCBqdW1wVG9FbmQ7CiAKLSAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmRW1wdHko
cmVnVDApKTsKKyAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmRW1wdHkoanNSZWdUMTApKTsK
IAogICAgIC8vIENvbXBpbGUgaW4gYSBwcmVkaWN0aXZlIHR5cGUgY2hlY2ssIGlmIHBvc3NpYmxl
LCB0byBzZWUgaWYgd2UgY2FuIHNraXAgd3JpdGluZyB0byB0aGUgbG9nLgogICAgIC8vIFRoZXNl
IHR5cGVjaGVja3MgYXJlIGlubGluZWQgdG8gbWF0Y2ggdGhvc2Ugb2YgdGhlIDY0LWJpdCBKU1Zh
bHVlIHR5cGUgY2hlY2tzLgogICAgIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5U
eXBlID09IFR5cGVVbmRlZmluZWQpCi0gICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZV
bmRlZmluZWQocmVnVDApKTsKKyAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZlVuZGVm
aW5lZChqc1JlZ1QxMCkpOwogICAgIGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0
U2VlblR5cGUgPT0gVHlwZU51bGwpCi0gICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZO
dWxsKHJlZ1QwKSk7CisgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZOdWxsKGpzUmVn
VDEwKSk7CiAgICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9
PSBUeXBlQm9vbGVhbikKLSAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZkJvb2xlYW4o
cmVnVDAsIHJlZ1QxKSk7CisgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZCb29sZWFu
KGpzUmVnVDEwLCByZWdUMikpOwogICAgIGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9s
YXN0U2VlblR5cGUgPT0gVHlwZUFueUludCkKLSAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFu
Y2hJZkludDMyKHJlZ1QwKSk7CisgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZJbnQz
Mihqc1JlZ1QxMCkpOwogICAgIGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2Vl
blR5cGUgPT0gVHlwZU51bWJlcikKLSAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZk51
bWJlcihyZWdUMCkpOworICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmTnVtYmVyKGpz
UmVnVDEwLCByZWdUMikpOwogICAgIGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0
U2VlblR5cGUgPT0gVHlwZVN0cmluZykgewotICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7Ci0gICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZTdHJp
bmcocmVnVDApKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoanNS
ZWdUMTApOworICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmU3RyaW5nKGpzUmVnVDEw
LnBheWxvYWRHUFIoKSkpOwogICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKICAgICB9CiAK
ICAgICAvLyBMb2FkIHRoZSB0eXBlIHByb2ZpbGluZyBsb2cgaW50byBUMi4KICAgICBUeXBlUHJv
ZmlsZXJMb2cqIGNhY2hlZFR5cGVQcm9maWxlckxvZyA9IG1fdm0tPnR5cGVQcm9maWxlckxvZygp
OwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlUHJvZmlsZXJMb2cpLCByZWdUMik7
Ci0gICAgLy8gTG9hZCB0aGUgbmV4dCBsb2cgZW50cnkgaW50byBUMS4KLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDIsIFR5cGVQcm9maWxlckxvZzo6Y3VycmVudExvZ0VudHJ5T2Zmc2V0KCkpLCBy
ZWdUMSk7CisgICAgLy8gTG9hZCB0aGUgbmV4dCBsb2cgZW50cnkgaW50byBUMy4KKyAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDIsIFR5cGVQcm9maWxlckxvZzo6Y3VycmVudExvZ0VudHJ5T2Zmc2V0
KCkpLCByZWdUMyk7CiAKICAgICAvLyBTdG9yZSB0aGUgSlNWYWx1ZSBvbnRvIHRoZSBsb2cgZW50
cnkuCi0gICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhyZWdUMSwgVHlwZVByb2ZpbGVyTG9nOjpM
b2dFbnRyeTo6dmFsdWVPZmZzZXQoKSkpOworICAgIHN0b3JlVmFsdWUoanNSZWdUMTAsIEFkZHJl
c3MocmVnVDMsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnZhbHVlT2Zmc2V0KCkpKTsKIAot
ICAgIC8vIFN0b3JlIHRoZSBzdHJ1Y3R1cmVJRCBvZiB0aGUgY2VsbCBpZiBUMCBpcyBhIGNlbGws
IG90aGVyd2lzZSwgc3RvcmUgMCBvbiB0aGUgbG9nIGVudHJ5LgotICAgIEp1bXAgbm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdG9yZTMyKHJlZ1QwLCBBZGRy
ZXNzKHJlZ1QxLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSk7CisgICAgLy8gU3RvcmUgdGhlIHN0cnVjdHVyZUlEIG9mIHRoZSBjZWxsIGlmIGpzUmVnVDEw
IGlzIGEgY2VsbCwgb3RoZXJ3aXNlLCBzdG9yZSAwIG9uIHRoZSBsb2cgZW50cnkuCisgICAgSnVt
cCBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGpzUmVnVDEwKTsKKyAgICBsb2FkMzIoQWRkcmVz
cyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QwKTsKKyAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QzLCBUeXBlUHJvZmlsZXJMb2c6
OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAgICAgSnVtcCBza2lwSXNDZWxsID0g
anVtcCgpOwogICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0z
MigwKSwgQWRkcmVzcyhyZWdUMSwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6c3RydWN0dXJl
SURPZmZzZXQoKSkpOworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKHJlZ1Qz
LCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAgICAg
c2tpcElzQ2VsbC5saW5rKHRoaXMpOwogCiAgICAgLy8gU3RvcmUgdGhlIHR5cGVMb2NhdGlvbiBv
biB0aGUgbG9nIGVudHJ5LgogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlTG9jYXRp
b24pLCByZWdUMCk7Ci0gICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhyZWdUMSwgVHlwZVByb2Zp
bGVyTG9nOjpMb2dFbnRyeTo6bG9jYXRpb25PZmZzZXQoKSkpOworICAgIHN0b3JlUHRyKHJlZ1Qw
LCBBZGRyZXNzKHJlZ1QzLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojpsb2NhdGlvbk9mZnNl
dCgpKSk7CiAKICAgICAvLyBJbmNyZW1lbnQgdGhlIGN1cnJlbnQgbG9nIGVudHJ5LgotICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnkpKSwgcmVn
VDEpOwotICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDIsIFR5cGVQcm9maWxlckxvZzo6
Y3VycmVudExvZ0VudHJ5T2Zmc2V0KCkpKTsKLSAgICBKdW1wIHNraXBDbGVhckxvZyA9IGJyYW5j
aFB0cihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW1QdHIoY2FjaGVkVHlwZVByb2ZpbGVyTG9n
LT5sb2dFbmRQdHIoKSkpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKFR5cGVQcm9m
aWxlckxvZzo6TG9nRW50cnkpKSwgcmVnVDMpOworICAgIHN0b3JlUHRyKHJlZ1QzLCBBZGRyZXNz
KHJlZ1QyLCBUeXBlUHJvZmlsZXJMb2c6OmN1cnJlbnRMb2dFbnRyeU9mZnNldCgpKSk7CisgICAg
SnVtcCBza2lwQ2xlYXJMb2cgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QzLCBUcnVzdGVkSW1t
UHRyKGNhY2hlZFR5cGVQcm9maWxlckxvZy0+bG9nRW5kUHRyKCkpKTsKICAgICAvLyBDbGVhciB0
aGUgbG9nIGlmIHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIGxvZy4KICAgICBjYWxsT3BlcmF0aW9u
Tm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25Qcm9jZXNzVHlwZVByb2ZpbGVyTG9nLCAmdm0oKSk7
CiAgICAgc2tpcENsZWFyTG9nLmxpbmsodGhpcyk7CkBAIC0xNzc4LDEzICsxODM4LDEzIEBAIHZv
aWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dD
aGlja2VuKCkpOwogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwotICAgIHN0YXRpY19hc3NlcnQo
bm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZl
IHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG5vT3Zlcmxh
cChyZWdUMCwgbm9uQXJnR1BSMCwgcmVnVDIpLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRo
aXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcExvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZT4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFja2V0
UmVnID0gcmVnVDA7CiAgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhp
cyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgogICAgIEdQUlJlZyBzY3JhdGNoMlJl
ZyA9IHJlZ1QyOwogICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFj
a2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKICAgICBsb2dTaGFkb3dDaGlja2Vu
UHJvbG9ndWVQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgcmVnVDMpOwogfQog
CkBAIC0xNzkyLDcgKzE4NTIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNr
ZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKICAgICB1cGRhdGVUb3BDYWxsRnJh
bWUoKTsKLSAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BS
MCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7Cisg
ICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAocmVnVDAsIG5vbkFyZ0dQUjAsIHJlZ1QyKSwgIndl
IHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CisgICAgc3RhdGljX2Fzc2Vy
dChub092ZXJsYXAocmVnVDAsIHJlZ1QxLCBqc1JlZ1QzMiwgcmVnVDQpLCAid2Ugd2lsbCBoYXZl
IHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwogICAgIEdQUlJlZyBz
aGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKICAgICB7CkBAIC0xODAwLDE0ICsxODYxLDEyIEBAIHZv
aWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1Qy
OwogICAgICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJl
Zywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKICAgICB9Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIGpzUmVnVDMyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUNCk7CiAgICAgbG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QxKTsKLSAgICBsb2dTaGFk
b3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwg
cmVnVDMsIHJlZ1QxLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGxvZ1No
YWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywganNSZWdUMzIsIHJlZ1Q0LCBy
ZWdUMSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAotI2VuZGlmIC8vIFVT
RShKU1ZBTFVFNjQpCi0KIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgbV9pc1NoYXJlYWJs
ZSA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCmluZGV4IGQ0ODQzNGNlZmZhOWU1MjcxNzcyOWMzNTQ0MDc5NTc4YWNmZTE3ODMuLjQyYWMx
MDNmM2VjNjg0ZmI4NmE4ZTIxY2UzOWU3N2ExZmM1YTQwOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTUwLDczICs1MCw2IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi12b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE1vdj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwotICAgIAot
ICAgIGlmIChzcmMuaXNDb25zdGFudCgpKQotICAgICAgICBlbWl0U3RvcmUoZHN0LCBnZXRDb25z
dGFudE9wZXJhbmQoc3JjKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGVtaXRMb2FkKHNyYywgcmVn
VDEsIHJlZ1QwKTsKLSAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLSAgICB9
Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIEFTU0VSVChyZXR1cm5WYWx1ZUdQUiAhPSBjYWxsRnJhbWVSZWdp
c3Rlcik7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbmQ+
KCk7Ci0gICAgZW1pdExvYWQoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDEsIHJldHVyblZhbHVlR1BS
KTsKLSAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgZW1pdEZ1bmN0aW9uRXBpbG9n
dWUoKTsKLSAgICByZXQoKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKbXA+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGFk
ZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKLSAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUu
c3RydWN0dXJlKCk7Ci0gICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6
YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBBbGxvY2F0
b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFs
T2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRv
cklmRXhpc3RzKTsKLQotICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmV0dXJuVmFsdWVHUFI7
Ci0gICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIHNj
cmF0Y2hSZWcgPSByZWdUMzsKLQotICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCkpOwotICAgIGVsc2UgewotICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0g
ICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAgICAgICAg
ZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFs
bG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJm
bHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5l
U3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAg
IGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUu
bV9kc3QsIHJlc3VsdFJlZyk7Ci0gICAgfQotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3
X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09i
amVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRDb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3Bl
cmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRz
dCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFz
X2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0
YW5jZT4oKTsKQEAgLTEyNCwxMyArNTcsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVz
X2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
IFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3Rh
bmNlVmFsdWU7CiAKLSAgICBlbWl0TG9hZFBheWxvYWQoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDAp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGhhc0luc3RhbmNlVmFsdWUsIHJl
Z1QwKTsKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5z
dGFuY2Ugd291bGQgZG8uCiAgICAgSnVtcCBoYXNJbnN0YW5jZVZhbHVlTm90Q2VsbCA9IGVtaXRK
dW1wSWZOb3RKU0NlbGwoaGFzSW5zdGFuY2VWYWx1ZSk7Ci0gICAgSnVtcCBjdXN0b21oYXNJbnN0
YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX3By
b2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNl
U3ltYm9sRnVuY3Rpb24oKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIEp1
bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFk
ZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblBy
b3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbikpKTsKIAogICAgIC8vIFdlIGtub3cgdGhhdCBj
b25zdHJ1Y3RvciBpcyBhbiBvYmplY3QgZnJvbSB0aGUgd2F5IGJ5dGVjb2RlIGlzIGVtaXR0ZWQg
Zm9yIGluc3RhbmNlb2YgZXhwcmVzc2lvbnMuCi0gICAgZW1pdExvYWRQYXlsb2FkKGNvbnN0cnVj
dG9yLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoY29uc3RydWN0
b3IsIHJlZ1QwKTsKIAogICAgIC8vIENoZWNrIHRoYXQgY29uc3RydWN0b3IgJ0ltcGxlbWVudHNE
ZWZhdWx0SGFzSW5zdGFuY2UnIGkuZS4gdGhlIG9iamVjdCBpcyBub3QgYSBDLUFQSSB1c2VyIG5v
ciBhIGJvdW5kIGZ1bmN0aW9uLgogICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0
SGFzSW5zdGFuY2UpLCByZWdUMCk7CkBAIC0xNTksOCArOTMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
dXNpbmcgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMUdQUjsKICAgICB1c2lu
ZyBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gyR1BSOwogCi0gICAgZW1pdExv
YWRQYXlsb2FkKHZhbHVlLCB2YWx1ZUpTUi5wYXlsb2FkR1BSKCkpOwotICAgIGVtaXRMb2FkUGF5
bG9hZChwcm90bywgcHJvdG9KU1IucGF5bG9hZEdQUigpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyUGF5bG9hZCh2YWx1ZSwgdmFsdWVKU1IucGF5bG9hZEdQUigpKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChwcm90bywgcHJvdG9KU1IucGF5bG9hZEdQUigpKTsKIAog
ICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxs
IC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5j
ZS4KICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWUpOwpAQCAtMTg4LDEyICsx
MjIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlc3VsdEdQUik7CiB9
CiAKLXZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9u
KikKLXsKLSAgICAvLyBUaGlzIGFsd2F5cyBnb2VzIHRvIHNsb3cgcGF0aCBzaW5jZSB3ZSBleHBl
Y3QgaXQgdG8gYmUgcmFyZS4KLSAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotfQotCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CkBAIC0yMTQsMTUgKzE0MiwxMiBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8UwogICAgIHVzaW5nIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG9K
U1I7CiAgICAgc3RhdGljX2Fzc2VydCh2YWx1ZUpTUiA9PSBwcmVmZXJyZWRBcmd1bWVudEpTUjxT
bG93T3BlcmF0aW9uLCAyPigpKTsKICAgICAvLyBQcm90byB3aWxsIGJlIHBhc3NlZCBvbiBzdGFj
aywganVzdCBtYWtlIHN1cmUgbm8gb3ZlcmxhcAotICAgIHN0YXRpY19hc3NlcnQoIXByb3RvSlNS
LnVzZXMoZ2xvYmFsT2JqZWN0R1BSKSk7Ci0gICAgc3RhdGljX2Fzc2VydCghcHJvdG9KU1IudXNl
cyhzdHViSW5mb0dQUikpOwotICAgIHN0YXRpY19hc3NlcnQoIXZhbHVlSlNSLnVzZXMoZ2xvYmFs
T2JqZWN0R1BSKSk7Ci0gICAgc3RhdGljX2Fzc2VydCghdmFsdWVKU1IudXNlcyhzdHViSW5mb0dQ
UikpOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKHZhbHVlSlNSLCBwcm90b0pTUiwgZ2xv
YmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUikpOwogCiAgICAgbG9hZEdsb2JhbE9iamVjdChnbG9i
YWxPYmplY3RHUFIpOwogICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwotICAgIGVtaXRMb2FkVGFnKHZhbHVlLCB2YWx1ZUpT
Ui50YWdHUFIoKSk7Ci0gICAgZW1pdExvYWRUYWcocHJvdG8sIHByb3RvSlNSLnRhZ0dQUigpKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZhbHVlLCB2YWx1ZUpTUi50YWdHUFIoKSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyhwcm90bywgcHJvdG9KU1IudGFnR1BSKCkp
OwogICAgIGNhbGxPcGVyYXRpb248U2xvd09wZXJhdGlvbj4oCiAgICAgICAgIEFkZHJlc3Moc3R1
YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksCiAg
ICAgICAgIGRzdCwKQEAgLTIzMCw4MyArMTU1LDI1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
bnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwotICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3Rv
ciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3Rh
bmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7Ci0KLSAgICBlbWl0TG9hZCh2
YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZFBheWxvYWQoY29uc3RydWN0b3IsIHJl
Z1QyKTsKLSAgICBlbWl0TG9hZChoYXNJbnN0YW5jZVZhbHVlLCByZWdUNCwgcmVnVDMpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgbV9wcm9maWxlZENvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHJlZ1QyLCBK
U1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpKTsKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOwotfQotICAgIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKICAgICAKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSwgcmVnVDApOwogICAgIGNvbXBh
cmUzMihFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSwg
cmVnVDApOwogCiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKLSAgICAKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBKdW1wIGlz
Q2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMSk7Ci0KLSAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1Qx
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKLSAgICAKLSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBKdW1wIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAg
IEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLSAgICAKLSAgICBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0g
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDEpOwotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7Ci0K
LSAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZG9uZS5saW5r
KHRoaXMpOwotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJc1VuZGVmaW5lZE9yTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwotCi0gICAgZW1pdExvYWRUYWcodmFsdWUsIHJlZ1QwKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChK
U1ZhbHVlOjpVbmRlZmluZWRUYWcgKyAxID09IEpTVmFsdWU6Ok51bGxUYWcpICYmIChKU1ZhbHVl
OjpOdWxsVGFnICYgMHgxKSwgIiIpOwotICAgIG9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7
Ci0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxU
YWcpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKLX0KLQogdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNC
b29sZWFuPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgCi0gICAg
ZW1pdExvYWRUYWcodmFsdWUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFn
KHZhbHVlLCByZWdUMCk7CiAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkJvb2xlYW5UYWcpLCByZWdUMCk7CiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJl
Z1QwKTsKIH0KQEAgLTMxNyw3ICsxODQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwogICAgIAotICAgIGVtaXRMb2FkVGFnKHZhbHVlLCByZWdUMCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyh2YWx1ZSwgcmVnVDApOwogICAgIGFkZDMyKFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDApOwogICAgIGNvbXBhcmUzMihCZWxvdywgcmVnVDAsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcgKyAxKSwgcmVnVDApOwogICAgIGVtaXRTdG9yZUJv
b2woZHN0LCByZWdUMCk7CkBAIC0zMzYsNyArMjAzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
Y2VsbF93aXRoX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgaW50IHR5
cGUgPSBieXRlY29kZS5tX3R5cGU7CiAKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1Qw
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSwgcmVnVDApOwogICAg
IEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKIAogICAgIGNvbXBhcmU4
KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7CkBAIC0zNTUsNyArMjIyLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRMb2FkKHZhbHVlLCBy
ZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxLCBy
ZWdUMCk7CiAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwogCiAg
ICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZv
VHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7CkBAIC0zNzQs
NyArMjQxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAot
ICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYywgcmVnVDEsIHJlZ1QwKTsKIAogICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENl
bGwocmVnVDEpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7CkBAIC0z
OTAsNyArMjU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3Ny
YzsKIAotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYywgcmVnVDEsIHJlZ1QwKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChyZWdUMSkpOwogICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsK
QEAgLTQwMSwxMTkgKzI2OCwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXko
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAgICAgZW1pdFN0b3Jl
KGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9u
X25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgZnVuYyA9IGJ5dGVjb2RlLm1fZnVuY3Rpb247Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIG5hbWUgPSBieXRlY29kZS5tX25hbWU7Ci0gICAgZW1pdExvYWRQYXlsb2Fk
KGZ1bmMsIHJlZ1QxKTsKLSAgICBlbWl0TG9hZChuYW1lLCByZWdUMywgcmVnVDIpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBtX3Byb2ZpbGVkQ29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwotfQot
CiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5v
dD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRMb2FkVGFn
KHNyYywgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcoc3JjLCByZWdUMCk7
CiAKLSAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QxLCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RC
b29sZWFuKHJlZ1QxLCBJbnZhbGlkR1BSUmVnKSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDEp
LCByZWdUMCk7CiAKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDAsIChkc3QgPT0gc3JjKSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSmZhbHNlPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBjb25kID0gYnl0ZWNvZGUubV9j
b25kaXRpb247Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotCi0gICAgZW1pdExvYWQoY29uZCwgcmVn
VDEsIHJlZ1QwKTsKLQotICAgIEpTVmFsdWVSZWdzIHZhbHVlKHJlZ1QxLCByZWdUMCk7Ci0gICAg
R1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7Ci0g
ICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFk
ZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBS
ZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgY29uZCA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOwotICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKLQotICAgIGVtaXRMb2FkKGNvbmQsIHJlZ1QxLCByZWdUMCk7Ci0gICAgYm9v
bCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIEpTVmFsdWVS
ZWdzIHZhbHVlKHJlZ1QxLCByZWdUMCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2
bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcU51bGw+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotCi0gICAgZW1p
dExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwotCi0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMSk7Ci0KLSAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qy
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0g
ICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKLQotICAg
IC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAg
ICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHN0YXRpY19hc3NlcnQoKEpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyArIDEgPT0gSlNWYWx1ZTo6TnVsbFRhZykgJiYgKEpTVmFsdWU6Ok51bGxUYWcg
JiAweDEpLCAiIik7Ci0gICAgb3IzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICBhZGRK
dW1wKGJyYW5jaElmTnVsbChyZWdUMSksIHRhcmdldCk7Ci0KLSAgICBpc05vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9y
ZWlnbi5saW5rKHRoaXMpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxsPigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLQotICAgIGVt
aXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKLQotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDEpOwotCi0gICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwot
ICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgd2FzTm90
SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNh
c2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0KLSAg
ICBzdGF0aWNfYXNzZXJ0KChKU1ZhbHVlOjpVbmRlZmluZWRUYWcgKyAxID09IEpTVmFsdWU6Ok51
bGxUYWcpICYmIChKU1ZhbHVlOjpOdWxsVGFnICYgMHgxKSwgIiIpOwotICAgIG9yMzIoVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUMSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZk5vdE51bGwocmVnVDEpLCB0
YXJnZXQpOwotCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci19Ci0KIHZvaWQgSklU
OjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSnVuZGVmaW5lZE9yTnVsbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRMb2FkVGFnKHZh
bHVlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyh2YWx1ZSwgcmVnVDAp
OwogICAgIHN0YXRpY19hc3NlcnQoKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyArIDEgPT0gSlNWYWx1
ZTo6TnVsbFRhZykgJiYgKEpTVmFsdWU6Ok51bGxUYWcgJiAweDEpLCAiIik7CiAgICAgb3IzMihU
cnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaElmTnVsbChyZWdUMCks
IHRhcmdldCk7CkBAIC01MjUsNyArMzAxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmlu
ZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwogCi0gICAgZW1pdExvYWRUYWcodmFsdWUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyVGFnKHZhbHVlLCByZWdUMCk7CiAgICAgc3RhdGljX2Fzc2VydCgoSlNWYWx1ZTo6
VW5kZWZpbmVkVGFnICsgMSA9PSBKU1ZhbHVlOjpOdWxsVGFnKSAmJiAoSlNWYWx1ZTo6TnVsbFRh
ZyAmIDB4MSksICIiKTsKICAgICBvcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwogICAgIGFk
ZEp1bXAoYnJhbmNoSWZOb3ROdWxsKHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTUzNSwxMyArMzExLDEy
IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEplcVB0cj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1
ZTsKLSAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29uc3RhbnRPcGVyYW5kKGJ5dGVj
b2RlLm1fc3BlY2lhbFBvaW50ZXIpOwotICAgIEFTU0VSVChzcGVjaWFsUG9pbnRlci5pc0NlbGwo
KSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVn
VDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMSwgcmVnVDApOwogICAg
IEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7Ci0gICAgYWRkSnVtcChicmFu
Y2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgp
KSksIHRhcmdldCk7CisgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50UGF5bG9hZChieXRlY29kZS5t
X3NwZWNpYWxQb2ludGVyLCByZWdUMik7CisgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIHJl
Z1QwLCByZWdUMiksIHRhcmdldCk7CiAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwogfQogCkBAIC01
NDksMTMgKzMyNCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0g
Ynl0ZWNvZGUubV92YWx1ZTsKLSAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29uc3Rh
bnRPcGVyYW5kKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpOwotICAgIEFTU0VSVChzcGVjaWFs
UG9pbnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdExvYWQo
c3JjLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdU
MSwgcmVnVDApOwogICAgIEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7Ci0g
ICAgSnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3Bl
Y2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnRQYXlsb2Fk
KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJlZ1QyKTsKKyAgICBKdW1wIGVxdWFsID0gYnJh
bmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIpOwogICAgIG5vdENlbGwubGluayh0aGlzKTsKICAg
ICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMigxKSwgYnl0ZWNvZGUsIE9wSm5lcVB0cjo6
TWV0YWRhdGE6Om9mZnNldE9mSGFzSnVtcGVkKCkpOwogICAgIGFkZEp1bXAoanVtcCgpLCB0YXJn
ZXQpOwpAQCAtNTcwLDcgKzM0NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBi
eXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhz
OwogCi0gICAgZW1pdExvYWQyKHNyYzEsIHJlZ1QxLCByZWdUMCwgc3JjMiwgcmVnVDMsIHJlZ1Qy
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QxLCByZWdUMCk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCByZWdUMywgcmVnVDIpOwogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkNlbGwocmVnVDEpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywgcmVn
VDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CkBAIC01OTUsMTMgKzM3MCwx
NSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRQogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFu
Y2hJZk5vdFN0cmluZyhyZWdUMikpOwogCiAgICAgLy8gU3RyaW5nIGNhc2UuCi0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCByZWdUMSwgcmVn
VDAsIHJlZ1QyKTsKICAgICBzdG9yZVJlc3VsdC5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIEdl
bmVyaWMgY2FzZS4KICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAv
LyBkb3VibGVzCiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVFcSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZUVxLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QyKSk7CiAKICAgICBzdG9yZVJlc3VsdC5saW5rKHRoaXMpOwogICAgIGVtaXRT
dG9yZUJvb2woZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC02MTQsNyArMzkxLDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdExvYWQyKHNyYzEsIHJlZ1Qx
LCByZWdUMCwgc3JjMiwgcmVnVDMsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYzEsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBy
ZWdUMywgcmVnVDIpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwg
cmVnVDMpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDEpKTsKICAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihCZWxvdywgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dl
c3RUYWcpKSk7CkBAIC02MzQsMTQgKzQxMiwxNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wRXFKdW1w
U2xvdyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBDb21waWxlT3BFcQog
ICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hJZk5vdFN0cmluZyhyZWdUMikpOwogCiAgICAg
Ly8gU3RyaW5nIGNhc2UuCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5n
RXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZVN0cmluZ0VxLCByZWdUMSwgcmVnVDAsIHJlZ1QyKTsKICAgICBlbWl0SnVtcFNsb3dU
b0hvdChicmFuY2hUZXN0MzIodHlwZSA9PSBDb21waWxlT3BFcVR5cGU6OkVxID8gTm9uWmVybyA6
IFplcm8sIHJldHVyblZhbHVlR1BSKSwganVtcFRhcmdldCk7CiAgICAgZG9uZS5hcHBlbmQoanVt
cCgpKTsKIAogICAgIC8vIEdlbmVyaWMgY2FzZS4KICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0
U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgbV9wcm9maWxlZENvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMikpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKHR5cGUgPT0gQ29tcGlsZU9wRXFUeXBlOjpFcSA/IE5vblplcm8gOiBaZXJv
LCByZXR1cm5WYWx1ZUdQUiksIGp1bXBUYXJnZXQpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwpA
QCAtNjYxLDcgKzQ0MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX25lcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNv
ZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKIAot
ICAgIGVtaXRMb2FkMihzcmMxLCByZWdUMSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCByZWdUMik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZDZWxsKHJlZ1QxKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwpAQCAtNjg2LDEzICs0NjcsMTUgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2UKICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZO
b3RTdHJpbmcocmVnVDIpKTsKIAogICAgIC8vIFN0cmluZyBjYXNlLgotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgcmVnVDEsIHJlZ1QwLCBy
ZWdUMik7CiAgICAgc3RvcmVSZXN1bHQuYXBwZW5kKGp1bXAoKSk7CiAKICAgICAvLyBHZW5lcmlj
IGNhc2UuCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gZG91
YmxlcwogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMikpOwogCiAgICAgc3RvcmVSZXN1bHQubGluayh0aGlzKTsKICAgICB4b3IzMihUcnVz
dGVkSW1tMzIoMHgxKSwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtNzA2LDcgKzQ4OSw4IEBAIHZvaWQg
SklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0TG9hZDIoc3JjMSwgcmVn
VDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjMSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIs
IHJlZ1QzLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qx
LCByZWdUMykpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMSkpOwogICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKEJlbG93LCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxv
d2VzdFRhZykpKTsKQEAgLTcyOSw3ICs1MTMsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0
RXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0g
Ynl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0TG9hZDIoc3JjMSwgcmVnVDEsIHJlZ1QwLCBzcmMy
LCByZWdUMywgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDEs
IHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIHJlZ1QzLCByZWdUMik7
CiAKICAgICAvLyBCYWlsIGlmIHRoZSB0YWdzIGRpZmZlciwgb3IgYXJlIGRvdWJsZS4KICAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7CkBAIC03NjksMTEg
KzU1NCwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRl
Y29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwog
Ci0gICAgZW1pdExvYWQyKHNyYzEsIHJlZ1QxLCByZWdUMCwgc3JjMiwgcmVnVDMsIHJlZ1QyKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCByZWdUMywgcmVnVDIpOwogCiAgICAgLy8gQmFpbCBp
ZiB0aGUgdGFncyBkaWZmZXIsIG9yIGFyZSBkb3VibGUuCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMykpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEJl
bG93LCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dl
c3RUYWcpKSk7CiAKICAgICAvLyBKdW1wIHRvIGEgc2xvdyBjYXNlIGlmIGJvdGggYXJlIHN0cmlu
Z3Mgb3Igc3ltYm9scyAobm9uIG9iamVjdCkuCiAgICAgSnVtcCBub3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QxKTsKQEAgLTgwNSw3ICs1OTEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
anN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0
ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZVN0cmljdEVxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlU3RyaWN0RXEsIHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC04MTUsOTEgKzYwMiwxOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9wcm9maWxlZENvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUNCwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRXFOdWxsPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1p
dExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDEpOwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBi
cmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92
ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QxKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihF
cXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBq
dW1wKCk7Ci0KLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotCi0gICAgY29tcGFyZTMyKEVx
dWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpLCByZWdUMik7Ci0gICAg
Y29tcGFyZTMyKEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRh
ZyksIHJlZ1QxKTsKLSAgICBvcjMyKHJlZ1QyLCByZWdUMSk7Ci0KLSAgICB3YXNOb3RJbW1lZGlh
dGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7Ci0KLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVtaXRMb2FkKHNyYywgcmVn
VDEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qx
KTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9u
WmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMy
KDEpLCByZWdUMSk7Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVt
cCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9i
YWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1Qw
LCByZWdUMiwgcmVnVDEpOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0g
ICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLQotICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVn
VDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSwgcmVnVDIpOwotICAgIGNvbXBhcmUz
MihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZWdUMSk7Ci0gICAgYW5kMzIocmVnVDIsIHJlZ1QxKTsKLQotICAgIHdhc05vdEltbWVkaWF0ZS5s
aW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsK
LQotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29w
X3Rocm93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUaHJvdz4oKTsKLSAgICBBU1NF
UlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwotICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7Ci0gICAgZW1pdExvYWQo
Ynl0ZWNvZGUubV92YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNl
cHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwotICAgIGp1bXBUb0V4Y2VwdGlvbkhh
bmRsZXIodm0oKSk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5t
X29wZXJhbmQ7CiAKLSAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QxLCByZWdUMCk7CiAKICAgICBKdW1wIGlzSW50MzIg
PSBicmFuY2hJZkludDMyKHJlZ1QxKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwpAQCAtOTE3
LDcgKzYzMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwogICAgIEpTVmFsdWVSZWdzIGFyZ3VtZW50VmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCk7CiAKLSAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QxLCByZWdUMCk7CiAKICAgICBKdW1wIGlzTm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFw
QmlnSW50KHJlZ1QwKSk7CkBAIC05MzgsNyArNjUyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
c3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QxLCByZWdUMCk7CiAKICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdFN0cmluZyhyZWdUMCkpOwpAQCAtOTUzLDcgKzY2Nyw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdExvYWQoc3JjLCByZWdUMSwg
cmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMSwgcmVnVDApOwog
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKQEAgLTEwMjUsNzQgKzczOSwxMSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY3VycmVudFNjb3Bl
ID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBlbWl0TG9hZFBheWxvYWQoY3VycmVudFNjb3BlLCBy
ZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoY3VycmVudFNjb3BlLCBy
ZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQo
KSksIHJlZ1QwKTsKICAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCByZWdUMCk7CiB9
CiAKLXZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFN3aXRjaEltbT4oKTsKLSAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1f
dGFibGVJbmRleDsKLSAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwotCi0gICAgLy8gY3JlYXRl
IGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0
YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07Ci0gICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxl
SW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1l
ZGlhdGUpKTsKLSAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsK
LQotICAgIGVtaXRMb2FkKHNjcnV0aW5lZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBhdXRvIG5vdElu
dDMyID0gYnJhbmNoSWZOb3RJbnQzMihyZWdUMSk7Ci0gICAgc3ViMzIoSW1tMzIodW5saW5rZWRU
YWJsZS5tX21pbiksIHJlZ1QwKTsKLQotICAgIGFkZEp1bXAoYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCByZWdUMCwgSW1tMzIobGlua2VkVGFibGUubV9jdGlPZmZzZXRzLnNpemUoKSkpLCBkZWZhdWx0
T2Zmc2V0KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobGlua2VkVGFibGUubV9jdGlPZmZzZXRz
LmRhdGEoKSksIHJlZ1QxKTsKLSAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFNj
YWxlUHRyKSwgcmVnVDEpOwotICAgIGZhckp1bXAocmVnVDEsIE5vUHRyVGFnKTsKLQotICAgIG5v
dEludDMyLmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3Bl
cmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCAmdm0oKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7Ci0gICAgZmFySnVt
cChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9zd2l0
Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoQ2hhcj4oKTsKLSAg
ICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsKLSAgICB1bnNpZ25l
ZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVj
b2RlLm1fc2NydXRpbmVlOwotCi0gICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBk
ZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxp
bmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fcHJvZmlsZWRDb2RlQmxvY2st
PnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07Ci0gICAgbV9z
d2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwg
ZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKLSAgICBsaW5rZWRUYWJs
ZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKLQotICAgIGVtaXRMb2FkKHNjcnV0aW5l
ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJX
aXRoVW5rbm93bktleVR5cGUsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWlu
KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN3
aXRjaFN0cmluZz4oKTsKLSAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJ
bmRleDsKLSAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwotCi0gICAgLy8gY3JlYXRlIGp1bXAg
dGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVu
dC4KLSAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1f
cHJvZmlsZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXNbdGFibGVJbmRleF07Ci0gICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3Jk
KHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3Jk
OjpTdHJpbmcpKTsKLSAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxl
KTsKLQotICAgIGVtaXRMb2FkKHNjcnV0aW5lZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgbV9wcm9maWxl
ZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRh
YmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKLX0KLQog
dm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBlbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpOwpAQCAtMTEwMCw3ICs3
NTEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIC8vIEV2ZW4gdGhvdWdoIEpJVCBjb2RlIGRvZXNuJ3QgdXNlIHRo
ZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBz
dGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8g
b2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIGZvciAodW5z
aWduZWQgaSA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVh
bFJlZ2lzdGVycygpOyBpIDwgbV9wcm9maWxlZENvZGVCbG9jay0+bnVtVmFycygpOyArK2kpCisg
ICAgc2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtVmFycygpOworICAgIGZv
ciAoc2l6ZV90IGkgPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1Zp
cnR1YWxSZWdpc3RlcnMoKTsgaSA8IGNvdW50OyArK2kpCiAgICAgICAgIGVtaXRTdG9yZSh2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwganNVbmRlZmluZWQoKSk7CiAKICAgICBKSVRTbG93UGF0
aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2Vu
dGVyKTsKQEAgLTExMTYsMTY0ICs3NjgsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFN0b3JlQ2Vs
bChkc3QsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7Ci0gICAgV3JpdGVCYXJyaWVyQmFz
ZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKLSAg
ICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgcmFyZURhdGFS
ZWcgPSByZWdUNDsKLSAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwotICAgIFJlZ2lz
dGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcg
PSByZWdUMjsKLSAgICBSZWdpc3RlcklEIGNhY2hlZEZ1bmN0aW9uUmVnID0gcmVnVDQ7Ci0gICAg
UmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDM7Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQoY2Fs
bGVlLCBjYWxsZWVSZWcpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90RnVuY3Rpb24oY2Fs
bGVlUmVnKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zm
c2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmFyZURhdGFSZWcpOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmFyZURhdGFSZWcsIFRydXN0ZWRJbW0zMihKU0Z1bmN0
aW9uOjpyYXJlRGF0YVRhZykpKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVu
Y3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZkFsbG9jYXRvcigpIC0gSlNG
dW5jdGlvbjo6cmFyZURhdGFUYWcpLCBhbGxvY2F0b3JSZWcpOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRP
ZlN0cnVjdHVyZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVSZWcpOwot
Ci0gICAgbG9hZFB0cihjYWNoZWRGdW5jdGlvbiwgY2FjaGVkRnVuY3Rpb25SZWcpOwotICAgIEp1
bXAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcyA9IGJyYW5jaFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rp
b25SZWcsIFRydXN0ZWRJbW1QdHIoSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkp
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIGNhbGxlZVJlZywgY2FjaGVk
RnVuY3Rpb25SZWcpKTsKLSAgICBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzLmxpbmsodGhpcyk7Ci0K
LSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1t
UHRyKG51bGxwdHIpOwotICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxs
b2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgYnV0dGVyZmx5
LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwotICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVn
LCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKLSAgICBl
bWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKLSAgICBh
ZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3Qs
IHJlc3VsdFJlZyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZUlEKiBjYWNo
ZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwotICAgIFZpcnR1
YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIgPSBieXRlY29kZS5tX3NyY0RzdDsKLQotICAgIGVtaXRM
b2FkKHRoaXNSZWdpc3RlciwgcmVnVDMsIHJlZ1QyKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90Q2VsbChyZWdUMykpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdU
MiwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVy
ZUlELCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwg
cmVnVDIpKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsKLSAgICBlbWl0TG9hZFRhZyhieXRlY29kZS5t
X3RhcmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJUYWcoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3By
b2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJs
b2NrKTsKLSAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1f
dHlwZUxvY2F0aW9uOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVj
b2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwotCi0gICAgLy8gTG9hZCBwYXlsb2FkIGluIFQw
LiBMb2FkIHRhZyBpbiBUMy4KLSAgICBlbWl0TG9hZFBheWxvYWQodmFsdWVUb1Byb2ZpbGUsIHJl
Z1QwKTsKLSAgICBlbWl0TG9hZFRhZyh2YWx1ZVRvUHJvZmlsZSwgcmVnVDMpOwotCi0gICAgSnVt
cExpc3QganVtcFRvRW5kOwotCi0gICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZkVtcHR5KHJl
Z1QzKSk7Ci0KLSAgICAvLyBDb21waWxlIGluIGEgcHJlZGljdGl2ZSB0eXBlIGNoZWNrLCBpZiBw
b3NzaWJsZSwgdG8gc2VlIGlmIHdlIGNhbiBza2lwIHdyaXRpbmcgdG8gdGhlIGxvZy4KLSAgICAv
LyBUaGVzZSB0eXBlY2hlY2tzIGFyZSBpbmxpbmVkIHRvIG1hdGNoIHRob3NlIG9mIHRoZSAzMi1i
aXQgSlNWYWx1ZSB0eXBlIGNoZWNrcy4KLSAgICBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xh
c3RTZWVuVHlwZSA9PSBUeXBlVW5kZWZpbmVkKQotICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJy
YW5jaElmVW5kZWZpbmVkKHJlZ1QzKSk7Ci0gICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9u
LT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlTnVsbCkKLSAgICAgICAganVtcFRvRW5kLmFwcGVuZChi
cmFuY2hJZk51bGwocmVnVDMpKTsKLSAgICBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1f
bGFzdFNlZW5UeXBlID09IFR5cGVCb29sZWFuKQotICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJy
YW5jaElmQm9vbGVhbihyZWdUMywgSW52YWxpZEdQUlJlZykpOwotICAgIGVsc2UgaWYgKGNhY2hl
ZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZUFueUludCkKLSAgICAgICAganVt
cFRvRW5kLmFwcGVuZChicmFuY2hJZkludDMyKHJlZ1QzKSk7Ci0gICAgZWxzZSBpZiAoY2FjaGVk
VHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlTnVtYmVyKSB7Ci0gICAgICAgIGp1
bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZOdW1iZXIoSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QwKSwg
cmVnVDEpKTsKLSAgICB9IGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5
cGUgPT0gVHlwZVN0cmluZykgewotICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMyk7Ci0gICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZTdHJpbmcocmVn
VDApKTsKLSAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgfQotCi0gICAgLy8gTG9h
ZCB0aGUgdHlwZSBwcm9maWxpbmcgbG9nIGludG8gVDIuCi0gICAgVHlwZVByb2ZpbGVyTG9nKiBj
YWNoZWRUeXBlUHJvZmlsZXJMb2cgPSBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoY2FjaGVkVHlwZVByb2ZpbGVyTG9nKSwgcmVnVDIpOwotCi0gICAgLy8g
TG9hZCB0aGUgbmV4dCBsb2cgZW50cnkgaW50byBUMS4KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDIsIFR5cGVQcm9maWxlckxvZzo6Y3VycmVudExvZ0VudHJ5T2Zmc2V0KCkpLCByZWdUMSk7Ci0K
LSAgICAvLyBTdG9yZSB0aGUgSlNWYWx1ZSBvbnRvIHRoZSBsb2cgZW50cnkuCi0gICAgc3RvcmUz
MihyZWdUMCwgQWRkcmVzcyhyZWdUMSwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6dmFsdWVP
ZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwot
ICAgIHN0b3JlMzIocmVnVDMsIEFkZHJlc3MocmVnVDEsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50
cnk6OnZhbHVlT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFn
KSkpOwotCi0gICAgLy8gU3RvcmUgdGhlIHN0cnVjdHVyZUlEIG9mIHRoZSBjZWxsIGlmIGFyZ3Vt
ZW50IGlzIGEgY2VsbCwgb3RoZXJ3aXNlLCBzdG9yZSAwIG9uIHRoZSBsb2cgZW50cnkuCi0gICAg
SnVtcCBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QzKTsKLSAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwotICAgIHN0b3Jl
MzIocmVnVDAsIEFkZHJlc3MocmVnVDEsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpKTsKLSAgICBKdW1wIHNraXBOb3RDZWxsID0ganVtcCgpOwotICAgIG5v
dENlbGwubGluayh0aGlzKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhy
ZWdUMSwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6c3RydWN0dXJlSURPZmZzZXQoKSkpOwot
ICAgIHNraXBOb3RDZWxsLmxpbmsodGhpcyk7Ci0KLSAgICAvLyBTdG9yZSB0aGUgdHlwZUxvY2F0
aW9uIG9uIHRoZSBsb2cgZW50cnkuCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVM
b2NhdGlvbiksIHJlZ1QwKTsKLSAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBUeXBl
UHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojpsb2NhdGlvbk9mZnNldCgpKSk7Ci0KLSAgICAvLyBJbmNy
ZW1lbnQgdGhlIGN1cnJlbnQgbG9nIGVudHJ5LgotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6
ZW9mKFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnkpKSwgcmVnVDEpOwotICAgIHN0b3JlMzIocmVn
VDEsIEFkZHJlc3MocmVnVDIsIFR5cGVQcm9maWxlckxvZzo6Y3VycmVudExvZ0VudHJ5T2Zmc2V0
KCkpKTsKLSAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDEsIFRy
dXN0ZWRJbW1QdHIoY2FjaGVkVHlwZVByb2ZpbGVyTG9nLT5sb2dFbmRQdHIoKSkpKTsKLSAgICAv
LyBDbGVhciB0aGUgbG9nIGlmIHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIGxvZy4KLSAgICBjYWxs
T3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25Qcm9jZXNzVHlwZVByb2ZpbGVyTG9n
LCAmdm0oKSk7Ci0KLSAgICBqdW1wVG9FbmQubGluayh0aGlzKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2Vu
KCkpOwotICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwotICAgIHN0YXRpY19hc3NlcnQobm9uQXJn
R1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2Js
ZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZT4oKTsKLSAgICBHUFJSZWcgc2hh
ZG93UGFja2V0UmVnID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BS
MDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgotICAgIEdQUlJlZyBz
Y3JhdGNoMlJlZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwg
c2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwotCi0gICAgc2NyYXRj
aDFSZWcgPSByZWdUNDsKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVn
VDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChzaGFkb3dQYWNrZXRSZWcs
IHNjcmF0Y2gxUmVnLCByZWdUMyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3df
Y2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2VuKCkpOwotICAgIHVwZGF0ZVRvcENh
bGxGcmFtZSgpOwotICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25B
cmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4i
KTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRv
d0NoaWNrZW5UYWlsPigpOwotICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAg
ICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24t
YXJndW1lbnQgcmVnaXN0ZXIuCi0gICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAg
ZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gx
UmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fdGhpc1Zh
bHVlLCByZWdUMik7Ci0gICAgZW1pdExvYWRUYWcoYnl0ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1Qx
KTsKLSAgICBKU1ZhbHVlUmVncyB0aGlzUmVncyhyZWdUMSwgcmVnVDIpOwotICAgIGVtaXRMb2Fk
UGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRh
aWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgcmVnVDMsIFRydXN0ZWRJbW1QdHIo
bV9wcm9maWxlZENvZGVCbG9jayksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7Ci19
Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXgg
OTU3Njk1YjMwZTkzOTliYmEwZTMwZjJlZmY0OTBkMzBmYjY3Y2I1Zi4uOGI2MWI2ZjI5NWUwNmIy
ODkxMGU2ZDY0ZmQxYzk2MTg4ZDMwNzA5YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTc3NSwxNCArNzc1LDEyIEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3B1dF9wcml2YXRlX25h
bWVfcHJlcGFyZUNhbGxHCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
LSNpZiBVU0UoSlNWQUxVRTY0KQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeUlkPigpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50
MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKICAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5
SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KQEAgLTc5MCw5ICs3ODgs
OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50
MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKICAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KQEAgLTgwMCwxMCArNzk4
LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0
dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJC
eUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdU
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUubV9iYXNlLCBy
ZWdUMCk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdU
Mik7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QzLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEs
IHJlZ1QyKTsKIH0KQEAgLTgxMSwyNiArODA5LDQwIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9n
ZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBk
ZWNsdHlwZShvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCk7CisgICAgY29uc3RleHByIEdQUlJlZyBn
bG9iYWxPYmplY3RHUlAgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAwPigp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNs
b3dPcGVyYXRpb24sIDE+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHByb3BlcnR5SlNS
ID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMj4oKTsKKyAgICAvLyBBdHRy
aWJ1dGVzIGluIGFyZ3VtZW50IDMKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNldHRlckdQUiA9IHBy
ZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDQ+KCk7CisKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyUGF5bG9hZChieXRlY29kZS5tX2Jhc2UsIGJhc2VHUFIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcHJvcGVydHlKU1IpOwogICAg
IGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5
VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUubV9hY2Nlc3Nvciwgc2V0dGVyR1BSKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdSUCk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgZ2xvYmFsT2JqZWN0R1JQLCBiYXNlR1BSLCBwcm9w
ZXJ0eUpTUiwgYXR0cmlidXRlcywgc2V0dGVyR1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRl
ckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBy
ZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwot
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0U2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsK
LX0KIAotI2VuZGlmCisgICAgdXNpbmcgU2xvd09wZXJhdGlvbiA9IGRlY2x0eXBlKG9wZXJhdGlv
blB1dFNldHRlckJ5VmFsKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdSUCA9
IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMT4o
KTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcHJvcGVydHlKU1IgPSBwcmVmZXJyZWRBcmd1
bWVudEpTUjxTbG93T3BlcmF0aW9uLCAyPigpOworICAgIC8vIEF0dHJpYnV0ZXMgaW4gYXJndW1l
bnQgMworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2V0dGVyR1BSID0gcHJlZmVycmVkQXJndW1lbnRH
UFI8U2xvd09wZXJhdGlvbiwgND4oKTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXls
b2FkKGJ5dGVjb2RlLm1fYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Byb3BlcnR5LCBwcm9wZXJ0eUpTUik7CisgICAgaW50MzJfdCBhdHRyaWJ1
dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQ
YXlsb2FkKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHNldHRlckdQUik7CisgICAgbG9hZEdsb2JhbE9i
amVjdChnbG9iYWxPYmplY3RHUlApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0
dGVyQnlWYWwsIGdsb2JhbE9iamVjdEdSUCwgYmFzZUdQUiwgcHJvcGVydHlKU1IsIGF0dHJpYnV0
ZXMsIHNldHRlckdQUik7Cit9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewpAQCAtMTk1OCwxMzAgKzE5NzAsNiBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVgogICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29k
ZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpI
YXNQcml2YXRlQnJhbmQpOwogfQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLQotdm9pZCBKSVQ6OmVt
aXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQotewotICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7Ci19Ci0KLQotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLXZvaWQg
SklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFJlc29sdmVTY29wZT4oKTsKLSAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9yZXNvbHZlVHlwZTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLQotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Nv
cGVHUFIgPSByZWdUMDsKLQotICAgIEp1bXBMaXN0IHNsb3dDYXNlOwotCi0gICAgYXV0byBkb1Zh
ckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJS
ZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52YWxpZEdQUlJlZykgewotICAgICAgICBpZiAoIW5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoZ2xv
YmFsT2JqZWN0R1BSID09IEludmFsaWRHUFJSZWcpIHsKLSAgICAgICAgICAgIGdsb2JhbE9iamVj
dEdQUiA9IHJlZ1Q0OwotICAgICAgICAgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RH
UFIpOwotICAgICAgICB9Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIs
IE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50
KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJl
c3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJ
c0ludmFsaWRhdGVkKSkpOwotICAgIH07Ci0KLSAgICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9
IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewotICAgICAgICBkb1ZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgbG9hZDMyRnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTG9jYWxT
Y29wZURlcHRoKCksIHJlZ1QxKTsKLQotICAgICAgICBBU1NFUlQoc2NvcGVHUFIgPT0gcmVnVDAp
OwotICAgICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJh
bmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICAgICAgc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCByZWdUMSk7Ci0gICAgICAgIGp1bXAoKS5saW5rVG8obG9vcCwgdGhpcyk7Ci0gICAg
ICAgIGRvbmUubGluayh0aGlzKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAo
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkg
ewotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29u
c3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCku
Ci0gICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKLSAgICAgICAgICAgIGRvVmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdU
MCk7Ci0gICAgICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNj
b3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCksIHJlZ1Qx
KTsKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9j
aCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAg
Y2FzZSBHbG9iYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgotICAgICAgICBjYXNlIEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICAvLyBKU1Nj
b3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSBmb3IgR2xvYmFsVmFyKiwKLSAgICAgICAgICAgIC8vIGFuZCBjb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSBmb3IgR2xvYmFsTGV4aWNh
bFZhciouCi0gICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKLSAgICAgICAgICAg
IGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
LCByZWdUMCk7Ci0gICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZh
ciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0
OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBj
YXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFJl
c29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZXNv
bHZlZENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICBjYXNlIFVu
cmVzb2x2ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBN
b2R1bGVWYXIpIAotICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29s
dmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTGV4aWNhbEVudmlyb25tZW50KCksIHJlZ1QwKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVH
UFIpOwotICAgICAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyIHx8IHBy
b2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0g
ICAgICAgICAgICBlbWl0Q29kZShwcm9maWxlZFJlc29sdmVUeXBlKTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Ci0K
LSAgICAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgICAgIGxvYWQzMkZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlJlc29s
dmVUeXBlKCksIHJlZ1QxKTsKLQotICAgICAgICAgICAgYXV0byBlbWl0Q2FzZSA9IFsmXSAoUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgICAgICAgICBKdW1wIG5vdENhc2UgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAg
ICAgICAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgICAgICAgICAgbm90Q2FzZS5saW5rKHRoaXMp
OwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgZW1pdENhc2UoR2xvYmFsVmFyKTsKLSAg
ICAgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgICAgIGVtaXRDYXNl
KEdsb2JhbExleGljYWxWYXIpOwotICAgICAgICAgICAgZW1pdENhc2UoR2xvYmFsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5k
KGp1bXAoKSk7Ci0KLSAgICAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2UpOwotCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwotfQotCi0jZWxzZQogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwpAQCAt
MjA5NCwxMSArMTk4MiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CiAgICAgQVNTRVJUKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50
SW5zdHJ1Y3Rpb24pOwogCi0gICAgLy8gSWYgd2UgcHJvZmlsZSBjZXJ0YWluIHJlc29sdmUgdHlw
ZXMsIHdlJ3JlIGdhdXJhbnRlZWQgYWxsIGxpbmtlZCBjb2RlIHdpbGwgaGF2ZSB0aGUgc2FtZQor
ICAgIC8vIElmIHdlIHByb2ZpbGUgY2VydGFpbiByZXNvbHZlIHR5cGVzLCB3ZSdyZSBndWFyYW50
ZWVkIGFsbCBsaW5rZWQgY29kZSB3aWxsIGhhdmUgdGhlIHNhbWUKICAgICAvLyByZXNvbHZlIHR5
cGUuCiAKICAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIAotICAgICAg
ICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6
Om9mZnNldE9mTGV4aWNhbEVudmlyb25tZW50KCksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0ckZy
b21NZXRhZGF0YShieXRlY29kZSwgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkxl
eGljYWxFbnZpcm9ubWVudCgpLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZWxzZSB7CiAgICAgICAg
IHVpbnQzMl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEo
KS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOwogCkBAIC0yMTA2LDkgKzE5OTQsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdU
MDsKICAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1Owog
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoc2NvcGUsIHNjb3BlR1BSKTsKICAgICAg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtZXRhZGF0YU9mZnNldCksIHNfbWV0YWRhdGFHUFIsIG1l
dGFkYXRhR1BSKTsKLQogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCks
IGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IGNvZGU7CkBAIC0yMTM0LDcgKzIwMjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
ICAgICB9CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYm94Q2VsbChy
ZXR1cm5WYWx1ZUdQUiwgcmV0dXJuVmFsdWVKU1IpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXR1cm5WYWx1ZUpTUik7CiB9CiAKIHRlbXBsYXRlIDxSZXNvbHZlVHlwZSBwcm9m
aWxlZFJlc29sdmVUeXBlPgpAQCAtMjE1MSw3ICsyMDM5LDEwIEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0m
IHZtKQogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUMjsgLy8gaW5jb21p
bmcKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7IC8vIGluY29taW5nCiAg
ICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OyAvLyBpbmNvbWlu
ZyAtIHBhc3MgdGhydSB0byBzbG93IHBhdGguCisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
R1BSID0gcmVnVDM7IC8vIGxvY2FsIHRlbXBvcmFyeQogICAgIFVOVVNFRF9QQVJBTShieXRlY29k
ZU9mZnNldEdQUik7CisgICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAocmV0dXJuVmFsdWVHUFIs
IG1ldGFkYXRhR1BSLCBieXRlY29kZU9mZnNldEdQUiwgc2NyYXRjaEdQUikpOworICAgIHN0YXRp
Y19hc3NlcnQoc2NvcGVHUFIgPT0gcmV0dXJuVmFsdWVHUFIpOyAvLyBlbWl0UmVzb2x2ZUNsb3N1
cmUgYXNzdW1lcyB0aGlzCiAKICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCkBAIC0yMTYx
LDIzICsyMDUyLDI0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mIHZtKQogICAgICAgICBpZiAoIW5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoZ2xv
YmFsT2JqZWN0R1BSID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgICAgIHN0YXRpY19hc3Nl
cnQobm9PdmVybGFwKHNjcmF0Y2hHUFIsIHJlZ1Q0KSk7CiAgICAgICAgICAgICBnbG9iYWxPYmpl
Y3RHUFIgPSByZWdUNDsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2Jq
ZWN0R1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRy
ZXNzKHNjcmF0Y2hHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2Jh
bE9iamVjdEdQUik7CiAgICAgICAgIH0KLSAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9i
YWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rp
b25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFu
Y2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkp
LCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92
YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNl
dDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiAgICAg
fTsKIAogICAgIGF1dG8gZW1pdFJlc29sdmVDbG9zdXJlID0gWyZdIChib29sIG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKSB7CiAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MpOwotICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1l
dGFkYXRhOjpvZmZzZXRPZkxvY2FsU2NvcGVEZXB0aCgpKSwgcmVnVDEpOwotICAgICAgICBSRUxF
QVNFX0FTU0VSVChzY29wZUdQUiA9PSByZWdUMCk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mTG9jYWxTY29wZURlcHRoKCkpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NvcGVHUFIgPT0gcmV0dXJuVmFsdWVH
UFIpOwogCiAgICAgICAgIExhYmVsIGxvb3AgPSBqaXQubGFiZWwoKTsKLSAgICAgICAgSnVtcCBk
b25lID0gaml0LmJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7Ci0gICAgICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgICAg
ICBqaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7CisgICAgICAgIEp1bXAgZG9uZSA9
IGppdC5icmFuY2hUZXN0MzIoWmVybywgc2NyYXRjaEdQUik7CisgICAgICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MocmV0dXJuVmFsdWVHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmV0dXJu
VmFsdWVHUFIpOworICAgICAgICBqaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJmppdCk7CiAgICAgICAgIGRvbmUu
bGluaygmaml0KTsKICAgICB9OwpAQCAtMjE4NywxMSArMjA3OSwxMSBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5r
KFZNJiB2bSkKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2Nv
cGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLgotICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJl
Z1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgICAg
ICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSwgcmVnVDApOwotICAgICAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBNZXRhZGF0YTo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSk7
Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRy
ZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vw
b2NoKCkpLCByZWdUMSkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgp
KSwgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJldHVyblZhbHVlR1BSKTsKKyAgICAg
ICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9m
R2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJldHVyblZhbHVl
R1BSLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkp
LCBzY3JhdGNoR1BSKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0yMjAx
LDExICsyMDkzLDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mIHZtKQogICAgICAgICBjYXNlIEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Nj
b3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSBmb3IgR2xvYmFsVmFyKiwKICAgICAgICAgICAgIC8vIGFuZCBjb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSBmb3IgR2xvYmFsTGV4aWNh
bFZhciouCi0gICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIHJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVn
VDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICAgICAg
ICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhzY3JhdGNoR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmV0dXJuVmFsdWVHUFIpOwogICAgICAgICAg
ICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgICAgICAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFs
TGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQWRkcmVzcyhyZXR1cm5WYWx1ZUdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFs
TGV4aWNhbEVudmlyb25tZW50KCkpLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CkBAIC0yMjg0LDggKzIxNzYs
MTIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3Bf
cmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYgdm0KICAgICAvLyBUaGUgZmFzdCBwYXRoIGFscmVh
ZHkgcHVzaGVkIHRoZSByZXR1cm4gYWRkcmVzcy4KICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5w
dXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKLSNlbGlmIENQVShBUk02NCkKKyNlbGlmIENQVShBUk02
NCkgfHwgQ1BVKEFSTV9USFVNQjIpCiAgICAgaml0LnB1c2hQYWlyKGZyYW1lUG9pbnRlclJlZ2lz
dGVyLCBsaW5rUmVnaXN0ZXIpOworI2VsaWYgQ1BVKE1JUFMpCisgICAgaml0LnB1c2hQYWlyKGZy
YW1lUG9pbnRlclJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjpyYSk7CisjZWxzZQorIyAgIGVycm9y
ICJOb3QgaW1wbGVtZW50ZWQgb24gcGxhdGZvcm0iCiAjZW5kaWYKIAogICAgIGNvbnN0ZXhwciBH
UFJSZWcgaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OwpAQCAtMjI5NCwxMCArMjE5
MCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29w
X3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mIHZtCiAgICAgY29uc3RleHByIEdQUlJlZyBjb2Rl
QmxvY2tHUFIgPSBhcmd1bWVudEdQUjM7CiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmpl
Y3RHUFIgPSBhcmd1bWVudEdQUjA7CiAgICAgY29uc3RleHByIEdQUlJlZyBpbnN0cnVjdGlvbkdQ
UiA9IGFyZ3VtZW50R1BSMTsKLQotICAgIHN0YXRpY19hc3NlcnQoaW5jb21pbmdCeXRlY29kZU9m
ZnNldEdQUiAhPSBjb2RlQmxvY2tHUFIpOwotICAgIHN0YXRpY19hc3NlcnQoaW5jb21pbmdCeXRl
Y29kZU9mZnNldEdQUiAhPSBnbG9iYWxPYmplY3RHUFIpOwotICAgIHN0YXRpY19hc3NlcnQoaW5j
b21pbmdCeXRlY29kZU9mZnNldEdQUiAhPSBpbnN0cnVjdGlvbkdQUik7CisgICAgc3RhdGljX2Fz
c2VydChub092ZXJsYXAoaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiwgY29kZUJsb2NrR1BSLCBn
bG9iYWxPYmplY3RHUFIsIGluc3RydWN0aW9uR1BSKSk7CiAKICAgICBqaXQubG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7CiAgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxP
YmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CkBAIC0yMzExLDggKzIyMDQsMTIgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29w
ZUdlbmVyYXRvcihWTSYgdm0KIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnBvcChYODZSZWdp
c3RlcnM6OmVicCk7Ci0jZWxpZiBDUFUoQVJNNjQpCi0gICAgaml0LnBvcFBhaXIoQ0NhbGxIZWxw
ZXJzOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpsaW5rUmVnaXN0ZXIpOwor
I2VsaWYgQ1BVKEFSTTY0KSB8fCBDUFUoQVJNX1RIVU1CMikKKyAgICBqaXQucG9wUGFpcihmcmFt
ZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyNlbGlmIENQVShNSVBTKQorICAgIGpp
dC5wb3BQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjpyYSk7CisjZWxz
ZQorIyAgIGVycm9yICJOb3QgaW1wbGVtZW50ZWQgb24gcGxhdGZvcm0iCiAjZW5kaWYKICAgICBq
aXQucmV0KCk7CiAKQEAgLTIzMjIsMTcyICsyMjE5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYg
dm0KICAgICBwYXRjaEJ1ZmZlci5saW5rKGV4Y2VwdGlvbkNoZWNrLCBDb2RlTG9jYXRpb25MYWJl
bChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBzbG93X29wX3Jl
c29sdmVfc2NvcGUiKTsKIH0KLSNlbmRpZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
LXZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCi17Ci0gICAgbG9hZFB0cihzdHJ1Y3R1cmVT
bG90LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKLSAgICBsb2FkMzIo
QWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOwotfQotCi12b2lkIEpJVDo6ZW1pdEdldFZh
ckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyByZWcpCi17Ci0gICAgbG9hZFB0
cihvcGVyYW5kLCByZWcpOwotfQotCi12b2lkIEpJVDo6ZW1pdEdldFZhckZyb21JbmRpcmVjdFBv
aW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyByZWcpCi17Ci0gICAgbG9hZFB0cihvcGVy
YW5kLCByZWcpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWcpLCByZWcpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3Bl
cmFuZCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJp
YWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOwotfQotCi0jaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29s
dmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJ
bmZvLnJlc29sdmVUeXBlKCk7Ci0KLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVn
VDI7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwotCi0gICAg
SnVtcExpc3Qgc2xvd0Nhc2U7Ci0KLSAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0g
KGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpIHsKLSAgICAgICAgaWYgKCFuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChyZWdUMyk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNF
VE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwot
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0
Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQp
KSk7Ci0gICAgfTsKLSAgICAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSkgewotICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIGNh
c2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZh
ciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcg
YnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVz
IGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIGxvYWRQdHJGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1
Y3R1cmUoKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFRlc3RQ
dHIoWmVybywgcmVnVDEpKTsKLSAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1
Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7Ci0KLSAgICAgICAgICAgIGppdEFzc2VydChzY29w
ZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIGxv
YWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAg
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xv
YmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihF
cXVhbCwgc2NvcGVHUFIsIHJlZ1QzKTsKLSAgICAgICAgICAgIH0pKTsKLQotICAgICAgICAgICAg
bG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDEpOwotCi0gICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJM
RUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRl
clRoYW5PckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7
Ci0gICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5l
KTsKLSAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIG5lZzMyKHJlZ1QxKTsKLSAgICAg
ICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgICAgICAgICBsb2Fk
NjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zm
c2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVnVDApOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHbG9iYWxWYXI6Ci0gICAgICAgIGNhc2Ug
R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhp
Y2FsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgotICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDAp
OwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDApOwotICAgICAgICAg
ICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAg
ICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGRvVmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAg
ICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QzKTsKLSAgICAgICAgICAgIHN0YXRpY19hc3NlcnQo
MSA8PCAzID09IHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICAgICAgbHNoaWZ0NjQoVHJ1c3Rl
ZEltbTMyKDMpLCByZWdUMyk7Ci0gICAgICAgICAgICBhZGRQdHIoc2NvcGVHUFIsIHJlZ1QzKTsK
LSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgSlNMZXhpY2FsRW52aXJvbm1lbnQ6
Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKLSAg
ICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5Ogot
ICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAg
fTsKLQotICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgcHJvZmls
ZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAg
ICAgZW1pdENvZGUocHJvZmlsZWRSZXNvbHZlVHlwZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEp1
bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBP
cEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpLCByZWdUMCk7Ci0g
ICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKLSAg
ICAgICAgZW1pdENvZGUoR2xvYmFsVmFyKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwotICAgICAgICBub3RHbG9iYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5v
dEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24gPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVt
aXRDb2RlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24u
bGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1w
IG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3Mp
KTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29k
ZShHbG9iYWxQcm9wZXJ0eSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAg
ICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0g
ICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhcik7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAg
ICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
LSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
OwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIHNsb3dDYXNl
LmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgIH0K
LQotICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19
Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKLQotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEZyb21TY29w
ZSwgZHN0LCBhcmd1bWVudEdQUjAsIGluc3RydWN0aW9uKTsKLX0KLQotI2Vsc2UKIHZvaWQgSklU
OjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRGcm9tU2NvcGU+KCk7CkBAIC0yNTAyLDExICsyMjM0LDExIEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDQ7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRHUFIgPSByZWdUNTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BS
ID0gcmVnVDM7CiAKICAgICB1aW50MzJfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2Rl
QmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyUGF5bG9hZChzY29wZSwgc2NvcGVHUFIpOwogICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIobWV0YWRhdGFPZmZzZXQpLCBzX21ldGFkYXRhR1BSLCBtZXRhZGF0YUdQUik7CiAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAK
QEAgLTI1MjksNyArMjI2MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGNvZGUgPSB2bS5n
ZXRDVElTdHViKGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuazxHbG9iYWxWYXI+KTsKIAogICAg
IGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJldHVyblZhbHVlSlNSKTsKIH0KIAogdGVtcGxhdGUgPFJlc29sdmVUeXBlIHByb2ZpbGVk
UmVzb2x2ZVR5cGU+CkBAIC0yNTQyLDYgKzIyNzQsMTAgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYgdm0p
CiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE7CiAgICAgY29u
c3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcg
c2NvcGVHUFIgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BS
ID0gcmVnVDM7IC8vIFVzZWQgb25seSBvbiBzbG93IHBhdGgKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2hHUFIgPSByZWdUNTsKKyAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZzZXRHUFIp
OworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKHJldHVyblZhbHVlSlNSLCBtZXRhZGF0YUdQ
Uiwgc2NvcGVHUFIsIGJ5dGVjb2RlT2Zmc2V0R1BSLCBzY3JhdGNoR1BSKSk7CiAKICAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCkBAIC0yNTUyLDEwICsyMjg4LDEwIEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0m
IHZtKQogICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcykgewogICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAg
ICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxP
YmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dD
YXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNl
dDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAg
ICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgQ29kZUJs
b2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGppdC5s
b2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0
LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBv
aW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsK
ICAgICB9OwogICAgIAogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlKSB7CkBAIC0yNTYzLDI5ICsyMjk5LDI4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtKQog
ICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gU3RydWN0dXJlIGNoZWNr
IGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9y
IGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2Nv
cGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6
Om9mZnNldE9mU3RydWN0dXJlKCkpLCByZWdUMSk7Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoaml0LmJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKLSAgICAgICAgICAgIGppdC5sb2Fk
MzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEp
OwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRk
cmVzcyhzY29wZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKyAg
ICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9wR2V0RnJvbVNjb3Bl
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKFplcm8sIHNjcmF0Y2hHUFIpKTsK
KyAgICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFw
cGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpKTsKIAogICAgICAgICAgICAgaml0LmppdEFz
c2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAg
ICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
cmVnVDMpOwotICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVC
bG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gaml0LmJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIHJlZ1QzKTsKKyAgICAgICAgICAg
ICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQ
UiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGppdC5icmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBzY3JhdGNo
R1BSKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDEpOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNl
dE9mT3BlcmFuZCgpKSwgc2NyYXRjaEdQUik7CiAKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5B
QkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBqaXQuYnJhbmNoMzIo
R3JlYXRlclRoYW5PckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zm
c2V0KSk7CisgICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGppdC5icmFuY2gzMihH
cmVhdGVyVGhhbk9yRXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGlu
ZU9mZnNldCkpOwogICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0
SXNOb3RPdXRPZkxpbmUpOwogICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsoJmppdCk7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Moc2NvcGVH
UFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGpp
dC5uZWczMihyZWdUMSk7Ci0gICAgICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEs
IHJlZ1QxKTsKLSAgICAgICAgICAgIGppdC5sb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwg
VGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhzY29wZUdQ
UiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NvcGVHUFIpOworICAgICAgICAgICAg
aml0Lm5lZ1B0cihzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQmFzZUlu
ZGV4KHNjb3BlR1BSLCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXR1cm5WYWx1ZUpTUik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKQEAgLTI1
OTMsMjAgKzIzMjgsMTYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYgdm0pCiAgICAgICAgIGNhc2UgR2xv
YmFsTGV4aWNhbFZhcjoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKICAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QwKTsKLSAg
ICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDApLCByZWdUMCk7CisgICAgICAgICAg
ICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVy
YW5kKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQWRkcmVzcyhz
Y3JhdGNoR1BSKSwgcmV0dXJuVmFsdWVKU1IpOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBl
ID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaElmRW1wdHkocmV0dXJuVmFsdWVKU1IpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgICAgICBkb1ZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAg
ICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCAgTWV0YWRhdGE6Om9mZnNldE9mT3Bl
cmFuZCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgc3RhdGljX2Fzc2VydCgxIDw8IDMgPT0gc2l6
ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgICAgICBqaXQubHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMp
LCByZWdUMyk7Ci0gICAgICAgICAgICBqaXQuYWRkUHRyKHNjb3BlR1BSLCByZWdUMyk7Ci0gICAg
ICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBKU0xleGljYWxFbnZpcm9ubWVudDo6
b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKLQorICAgICAgICAgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgaml0LmxvYWRWYWx1ZShCYXNlSW5kZXgoc2NvcGVHUFIsIHNj
cmF0Y2hHUFIsIFRpbWVzRWlnaHQsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlh
YmxlcygpKSwgcmV0dXJuVmFsdWVKU1IpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgRHluYW1pYzoKICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKQEAg
LTI2MjMsMTEgKzIzNTQsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYgdm0pCiAgICAgICAgIGVtaXRD
b2RlKHByb2ZpbGVkUmVzb2x2ZVR5cGUpOwogICAgIGVsc2UgewogICAgICAgICBKdW1wTGlzdCBz
a2lwVG9FbmQ7Ci0gICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRh
dGE6Om9mZnNldE9mR2V0UHV0SW5mbygpKSwgcmVnVDApOwotICAgICAgICBqaXQuYW5kMzIoVHJ1
c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVU
eXBlIGludG8gVDAKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRh
ZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0LmFu
ZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAvLyBM
b2FkIFJlc29sdmVUeXBlIGludG8gc2NyYXRjaEdQUgogCiAgICAgICAgIGF1dG8gZW1pdENhc2VX
aXRob3V0Q2hlY2sgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7Ci0gICAgICAgICAg
ICBKdW1wIG5vdENhc2UgPSBqaXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIEp1bXAgbm90Q2FzZSA9IGppdC5icmFuY2gz
MihOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CiAgICAg
ICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CiAgICAgICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGppdC5qdW1wKCkpOwogICAgICAgICAgICAgbm90Q2FzZS5saW5rKCZqaXQpOwpAQCAtMjY2
MSw4ICsyMzkyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6
OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYgdm0pCiAgICAgfQogCiAgICAgc3RhdGlj
X2Fzc2VydChWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyA9PSAxKTsKLSAgICBqaXQuc3Rv
cmU2NChyZWdUMCwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmls
ZSgpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKLQorICAgIGppdC5z
dG9yZVZhbHVlKHJldHVyblZhbHVlSlNSLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6
b2Zmc2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkp
OwogICAgIGppdC5yZXQoKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9C
QUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKQEAgLTI2ODAsNDkgKzI0
MTAsNjYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3df
b3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IoVk0mIHYKIAogI2lmIENQVShYODZfNjQpCiAgICAg
aml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwotI2VsaWYgQ1BVKEFSTTY0KQorI2VsaWYgQ1BV
KEFSTTY0KSB8fCBDUFUoQVJNX1RIVU1CMikKICAgICBqaXQucHVzaFBhaXIoZnJhbWVQb2ludGVy
UmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisjZWxpZiBDUFUoTUlQUykKKyAgICBqaXQucHVzaFBh
aXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6OnJhKTsKKyNlbHNlCisjICAg
ZXJyb3IgIk5vdCBpbXBsZW1lbnRlZCBvbiBwbGF0Zm9ybSIKICNlbmRpZgogCiAgICAgdXNpbmcg
TWV0YWRhdGEgPSBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE7CiAgICAgY29uc3RleHByIEdQUlJl
ZyBtZXRhZGF0YUdQUiA9IHJlZ1Q0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgaW5jb21pbmdCeXRl
Y29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIGNvbnN0ZXhwciBHUFJSZWcgaW5jb21pbmdCeXRl
Y29kZU9mZnNldEdQUiA9IHJlZ1QzOwogICAgIGppdC5zdG9yZTMyKGluY29taW5nQnl0ZWNvZGVP
ZmZzZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cykpOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBjb2RlQmxvY2tHUFIgPSBhcmd1bWVudEdQUjM7
CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CiAgICAgY29uc3RleHByIEdQ
UlJlZyBpbnN0cnVjdGlvbkdQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBzdGF0aWNfYXNzZXJ0KGlu
Y29taW5nQnl0ZWNvZGVPZmZzZXRHUFIgIT0gY29kZUJsb2NrR1BSKTsKLSAgICBzdGF0aWNfYXNz
ZXJ0KGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIgIT0gZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICBz
dGF0aWNfYXNzZXJ0KGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIgIT0gaW5zdHJ1Y3Rpb25HUFIp
OwotICAgIHN0YXRpY19hc3NlcnQobWV0YWRhdGFHUFIgIT0gY29kZUJsb2NrR1BSKTsKLSAgICBz
dGF0aWNfYXNzZXJ0KG1ldGFkYXRhR1BSICE9IGdsb2JhbE9iamVjdEdQUik7Ci0gICAgc3RhdGlj
X2Fzc2VydChtZXRhZGF0YUdQUiAhPSBpbnN0cnVjdGlvbkdQUik7CisgICAgc3RhdGljX2Fzc2Vy
dChub092ZXJsYXAobWV0YWRhdGFHUFIsIGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIsIHNjcmF0
Y2hHUFIsIGdsb2JhbE9iamVjdEdQUiwgaW5zdHJ1Y3Rpb25HUFIpKTsKIAotICAgIGppdC5sb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsK
LSAgICBqaXQubG9hZFB0cihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRP
Zkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICBqaXQubG9hZFB0cihBZGRy
ZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50
ZXIoKSksIGluc3RydWN0aW9uR1BSKTsKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jayksIHNjcmF0Y2hHUFIpOworICAgIGppdC5sb2FkUHRyKEFkZHJl
c3Moc2NyYXRjaEdQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFs
T2JqZWN0R1BSKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIENvZGVCbG9j
azo6b2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBpbnN0cnVjdGlvbkdQUik7CiAg
ICAgaml0LmFkZFB0cihpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSLCBpbnN0cnVjdGlvbkdQUik7
CiAKLSAgICBBU1NFUlQoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKS5jb250YWlu
cyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcikpOwotICAgIGppdC5tb3ZlKG1ldGFkYXRhR1BS
LCBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7IC8vIFByZXNlcnZlIG1ldGFkYXRhIGluIGEg
Y2FsbGVlIHNhdmVkIHJlZ2lzdGVyLgorICAgIC8vIFByZXNlcnZlIG1ldGFkYXRhIGluIGEgY2Fs
bGVlIHNhdmVkIHJlZ2lzdGVyLgorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgY29uc3RleHByIEdQ
UlJlZyBtZXRhZGF0YUNTUiA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOworICAgIGF1dG8g
cmVzdG9yZUhpamFja2VkQ1NSID0gWyZdKCkgeworICAgICAgICBqaXQubW92ZShUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpOworICAg
IH07CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRh
dGFDU1IgPSBzX21ldGFkYXRhR1BSOworICAgIGF1dG8gcmVzdG9yZUhpamFja2VkQ1NSID0gWyZd
KCkgeworICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHNfbWV0YWRhdGFHUFIpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHNfbWV0
YWRhdGFHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBzX21ldGFkYXRh
R1BSKTsKKyAgICB9OworI2VuZGlmCisgICAgQVNTRVJUKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZl
UmVnaXN0ZXJzKCkuY29udGFpbnMobWV0YWRhdGFDU1IpKTsKKyAgICBqaXQubW92ZShtZXRhZGF0
YUdQUiwgbWV0YWRhdGFDU1IpOworCiAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9w
ZXJhdGlvbkdldEZyb21TY29wZSk+KGdsb2JhbE9iamVjdEdQUiwgaW5zdHJ1Y3Rpb25HUFIpOwog
ICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CiAgICAgQ2FsbCBvcGVyYXRpb24gPSBq
aXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgIEp1bXAgZXhjZXB0aW9uQ2hlY2sgPSBqaXQu
ZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlvbkNoZWNrKHZtKTsKIAotICAgIGppdC5zdG9yZTY0KHJl
Z1QwLCBBZGRyZXNzKEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBNZXRhZGF0YTo6b2Zmc2V0
T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwotICAg
IGppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBHUFJJbmZvOjpudW1i
ZXJUYWdSZWdpc3Rlcik7CisgICAgaml0LnN0b3JlVmFsdWUocmV0dXJuVmFsdWVKU1IsIEFkZHJl
c3MobWV0YWRhdGFDU1IsIE1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKSArIFZhbHVlUHJvZmls
ZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CisgICAgcmVzdG9yZUhpamFja2VkQ1NSKCk7CiAK
ICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wb3AoWDg2UmVnaXN0ZXJzOjplYnApOwotI2VsaWYg
Q1BVKEFSTTY0KQorI2VsaWYgQ1BVKEFSTTY0KSB8fCBDUFUoQVJNX1RIVU1CMikKICAgICBqaXQu
cG9wUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyNlbGlmIENQVShN
SVBTKQorICAgIGppdC5wb3BQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJz
OjpyYSk7CisjZWxzZQorIyAgIGVycm9yICJOb3QgaW1wbGVtZW50ZWQgb24gcGxhdGZvcm0iCiAj
ZW5kaWYKICAgICBqaXQucmV0KCk7CiAKICAgICBleGNlcHRpb25DaGVjay5saW5rKCZqaXQpOwot
ICAgIGppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBHUFJJbmZvOjpu
dW1iZXJUYWdSZWdpc3Rlcik7CisgICAgcmVzdG9yZUhpamFja2VkQ1NSKCk7CiAgICAgSnVtcCBq
dW1wVG9IYW5kbGVyID0gaml0Lmp1bXAoKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
aml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmsp
OwpAQCAtMjczMSw3ICsyNDc4LDYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IoVk0mIHYKICAgICBwYXRj
aEJ1ZmZlci5saW5rKGp1bXBUb0hhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hC
dWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUi
KTsKIH0KLSNlbmRpZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKIHZvaWQgSklUOjpl
bWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewpAQCAtMjc0NywyMyArMjQ5MywyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIFN0
cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBz
dHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4KICAgICAgICAgICAg
IC8vIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUg
dmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCksIHJlZ1QxKTsKLSAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKLSAgICAgICAgICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKyAgICAgICAg
ICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyB2YWx1ZUpTUiA9IGpzUmVnVDEwOworICAgICAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QyOworICAgICAgICAgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoR1BSMSA9IHJlZ1QzOworICAgICAgICAgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoR1BSMiA9IHJlZ1Q0OworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChub092
ZXJsYXAodmFsdWVKU1IsIHNjb3BlR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIpKTsKKyAg
ICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0
YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHNjcmF0Y2hHUFIxKSk7CisgICAgICAg
ICAgICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoR1BSMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHNjcmF0Y2hHUFIxKSk7CiAKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QyKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZh
bHVlSlNSKTsKIAogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQp
PihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Myk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1Qz
KTsKKyAgICAgICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIyKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgc2NyYXRjaEdQUjIp
OwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQ
dHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9m
T3BlcmFuZCgpLCByZWdUMSk7Ci0gICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAg
ICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMywgcmVnVDEsIFRpbWVzRWlnaHQsIChm
aXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5
dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgc2NyYXRj
aEdQUjEpOworICAgICAgICAgICAgbmVnUHRyKHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIHN0
b3JlVmFsdWUodmFsdWVKU1IsIEJhc2VJbmRleChzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjEsIFRp
bWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSkpOwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yNzcxLDIy
ICsyNTIyLDIzIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAg
Y2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5
cGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKGpzUmVnVDEw
LCByZWdUMiwgcmVnVDMpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QyKTsKKyAgICAgICAgICAgIGVt
aXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlLCByZWdUMik7CiAKLSAgICAgICAgICAgIGxv
YWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNl
dE9mT3BlcmFuZCgpLCByZWdUMCk7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5
dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDIp
OwogCiAgICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oYnl0ZWNvZGUubV9nZXRQdXRJ
bmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhl
cmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBjaGVj
a3Mgc3RhdGljYWxseS4KLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDApLCBy
ZWdUMSk7Ci0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkp
OworICAgICAgICAgICAgICAgIGxvYWRWYWx1ZShBZGRyZXNzKHJlZ1QyKSwganNSZWdUMTApOwor
ICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkoanNSZWdUMTApKTsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QxKTsK
LSAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDEpOworICAgICAgICAg
ICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QzKTsKKyAgICAgICAgICAgIGVtaXROb3RpZnlX
cml0ZVdhdGNocG9pbnQocmVnVDMpOwogCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJl
Z1QwKSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBqc1JlZ1Qx
MCk7CisgICAgICAgICAgICBzdG9yZVZhbHVlKGpzUmVnVDEwLCBBZGRyZXNzKHJlZ1QyKSk7CiAK
ICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJW
YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI3OTQsMTQgKzI1NDYsMTUgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENs
b3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KG5vT3Zl
cmxhcChqc1JlZ1QxMCwgcmVnVDIsIHJlZ1QzKSk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMyk7CiAK
LSAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6
TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMCk7CisgICAgICAgICAgICBs
b2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDMpOwogICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCks
IHJlZ1QyKTsKLSAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDApOwot
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgICAgICAgICAg
c3RvcmU2NChyZWdUMSwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNFaWdodCwgSlNMZXhp
Y2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpKTsKKyAgICAgICAgICAgIGVtaXRO
b3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDMpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwganNSZWdUMTApOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlclBheWxvYWQoc2NvcGUsIHJlZ1QzKTsKKyAgICAgICAgICAgIHN0b3JlVmFsdWUoanNSZWdU
MTAsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSk7CiAKICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJp
ZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsK
QEAgLTI5NDgsMTAgKzI3MDEsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1l
bnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJl
Z2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9
IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1
bWVudHMsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRz
OjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
KSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlclBheWxvYWQoYXJndW1lbnRzLCByZWdUMCk7CisgICAgbG9hZFZhbHVlKEFkZHJlc3MocmVn
VDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSksIGpzUmVnVDEwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCBqc1JlZ1QxMCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IGpzUmVnVDEwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjk2MCw1MSArMjcxMywxNSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVj
b2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1Qw
LCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPikpKTsKKworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKHJlZ1Qy
LCBqc1JlZ1QxMCkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGFyZ3VtZW50
cywgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGpzUmVnVDEwKTsK
KyAgICBzdG9yZVZhbHVlKGpzUmVnVDEwLCBBZGRyZXNzKHJlZ1QyLCBEaXJlY3RBcmd1bWVudHM6
OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikp
KTsKIAogICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVy
VmFsdWUpOwogfQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIg
b3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQotewot
ICAgIC8vIHZhbHVlIG1heSBiZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBpZiBtb2RlIGlzIFVu
Y29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4KLSAgICBKdW1wIHZh
bHVlTm90Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09
IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMCk7Ci0gICAgfQotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIs
IHJlZ1QwKTsKLSAgICBKdW1wIG93bmVyTm90Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRG
aWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQotICAgICAgICBv
d25lck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgSnVtcCBvd25lcklz
UmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCByZWdUMCwgcmVnVDEpOwot
ICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbldyaXRlQmFycmllclNs
b3dQYXRoLCAmdm0oKSwgcmVnVDApOwotICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGlu
ayh0aGlzKTsKLQotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBt
b2RlID09IFNob3VsZEZpbHRlckJhc2UpCi0gICAgICAgIG93bmVyTm90Q2VsbC5saW5rKHRoaXMp
OwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmls
dGVyQmFzZUFuZFZhbHVlKSAKLSAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIHZhbHVlTm90Q2VsbDsKLSAgICBpZiAobW9k
ZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKLQotICAgIGVtaXRXcml0ZUJhcnJpZXIob3duZXIpOwotCi0gICAgaWYg
KG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIAotICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0
aGlzKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwpAQCAtMzAxMiwxMSAr
MjcyOSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRl
cm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5
bG9hZChiYXNlLCByZWdUMCk7CisgICAgbG9hZFZhbHVlKEFkZHJlc3MocmVnVDAsIEpTSW50ZXJu
YWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIGpzUmVn
VDEwKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBq
c1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzAyNiwxMiArMjc0MywxNSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdU
MCwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5k
ZXgpKSk7CisgICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAocmVnVDIsIGpzUmVnVDEwKSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYmFzZSwgcmVnVDIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGpzUmVnVDEwKTsKKyAgICBzdG9yZVZhbHVlKGpzUmVn
VDEwLCBBZGRyZXNzKHJlZ1QyLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9m
SW50ZXJuYWxGaWVsZChpbmRleCkpKTsKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigpOwpAQCAtMzI2OCwxOCArMjk4OCw5NiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdAogICAgIGVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVy
dHlJbXBsKGN1cnJlbnRJbnN0cnVjdGlvbiwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1l
cmF0b3JIYXNPd25Qcm9wZXJ0eT4oKSwgc2xvd19wYXRoX2VudW1lcmF0b3JfaGFzX293bl9wcm9w
ZXJ0eSk7CiB9CiAKLSNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCisjZWxpZiBVU0UoSlNWQUxVRTMy
XzY0KQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBz
bG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZ2V0X3Byb3Bl
cnR5X2VudW1lcmF0b3IpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklU
OjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW51bWVyYXRvcl9uZXh0KTsKKyAgICBzbG93UGF0aENh
bGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0
aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2Vu
dW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQoreworICAgIFVOUkVBQ0hBQkxF
X0ZPUl9QTEFURk9STSgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFNs
b3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3Bh
dGhfZW51bWVyYXRvcl9pbl9ieV92YWwpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisK
K3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93
UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW51bWVyYXRvcl9o
YXNfb3duX3Byb3BlcnR5KTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCisjZW5kaWYK
KworI2lmIFVTRShKU1ZBTFVFNjQpCiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1
YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2Rl
IG1vZGUpCiB7CiAgICAgLy8gdmFsdWUgbWF5IGJlIGludmFsaWQgVmlydHVhbFJlZ2lzdGVyIGlm
IG1vZGUgaXMgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBvciBTaG91bGRGaWx0ZXJCYXNlLgog
ICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVl
IHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7Ci0gICAgICAgIGVtaXRMb2Fk
VGFnKHZhbHVlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
ICAgICB9Ci0gICAgCi0gICAgZW1pdExvYWQob3duZXIsIHJlZ1QwLCByZWdUMSk7CisKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCk7CisgICAgSnVtcCBvd25lck5vdENl
bGw7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0g
U2hvdWxkRmlsdGVyQmFzZSkKKyAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKTsKKworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJC
cmFuY2godm0oKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25D
aGVjayhvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIHJlZ1QwKTsKKyAgICBv
d25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CisKKyAgICBpZiAobW9kZSA9PSBT
aG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQorICAg
ICAgICBvd25lck5vdENlbGwubGluayh0aGlzKTsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0
ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkKKyAgICAgICAgdmFs
dWVOb3RDZWxsLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpT
Q2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2Rl
KQoreworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBKdW1w
IHZhbHVlTm90Q2VsbDsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKKyAgICAg
ICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgIGVtaXRXcml0
ZUJhcnJpZXIob3duZXIpOworCisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpCisg
ICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOworfQorCisjZWxpZiBVU0UoSlNWQUxVRTMy
XzY0KQorCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQoreworICAgIC8v
IHZhbHVlIG1heSBiZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBpZiBtb2RlIGlzIFVuY29uZGl0
aW9uYWxXcml0ZUJhcnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4KKyAgICBKdW1wIHZhbHVlTm90
Q2VsbDsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3Vs
ZEZpbHRlckJhc2VBbmRWYWx1ZSkgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFn
KHZhbHVlLCByZWdUMCk7CisgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CisgICAgfQorCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVnVDAs
IHJlZ1QxKTsKICAgICBKdW1wIG93bmVyTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRG
aWx0ZXJCYXNlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKQogICAgICAgICBv
d25lck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtMzI5MCw3ICszMDg4LDcg
QEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmEKIAogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRl
ckJhc2UgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpCiAgICAgICAgIG93bmVy
Tm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8
IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSAKKyAgICBpZiAobW9kZSA9PSBTaG91
bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkKICAgICAg
ICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKQEAgLTMyOTgsMTcgKzMwOTYsMTcgQEAg
dm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXcml0ZUJhcnJpZXJNb2QKIHsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBp
ZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgewotICAgICAgICBlbWl0TG9hZFRhZyh2YWx1
ZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZhbHVlLCByZWdU
MCk7CiAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAg
fQogCiAgICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7CiAKLSAgICBpZiAobW9kZSA9PSBTaG91
bGRGaWx0ZXJWYWx1ZSkgCisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpCiAgICAg
ICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQogCi0jZW5kaWYgLy8gVVNFKEpTVkFMVUU2
NCkKKyNlbmRpZgogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIg
b3duZXIsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBjNjBiNjMyZTk0ZDFkZWYyZjQyMzBmMGE4NGJlODM2Y2ZkNzM1MmExLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw2NDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0jaWYg
VVNFKEpTVkFMVUUzMl82NCkKLSNpbmNsdWRlICJKSVQuaCIKLQotI2luY2x1ZGUgIkNhY2hlYWJs
ZUlkZW50aWZpZXJJbmxpbmVzLmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAi
RGlyZWN0QXJndW1lbnRzLmgiCi0jaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCi0j
aW5jbHVkZSAiSW50ZXJwcmV0ZXJJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSklUSW5saW5lcy5oIgot
I2luY2x1ZGUgIkpTQXJyYXkuaCIKLSNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCi0jaW5jbHVkZSAi
SlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKLSNpbmNsdWRlICJKU1Byb21pc2UuaCIKLSNpbmNsdWRl
ICJMaW5rQnVmZmVyLmgiCi0jaW5jbHVkZSAiT3Bjb2RlSW5saW5lcy5oIgotI2luY2x1ZGUgIlJl
c3VsdFR5cGUuaCIKLSNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1
cmVTdHViSW5mby5oIgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgotCi0KLW5h
bWVzcGFjZSBKU0MgewotICAgIAotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlJZD4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBpbnQgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGludCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOwotICAgIFZpcnR1YWxSZWdpc3RlciBnZXR0ZXIgPSBieXRlY29kZS5tX2FjY2Vzc29yOwot
Ci0gICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0TG9hZFBheWxvYWQo
Z2V0dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlk
LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fcHJvZmlsZWRD
b2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDMpOwot
fQotCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHk7Ci0gICAgaW50IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHNldHRlciA9IGJ5dGVjb2RlLm1fYWNjZXNzb3I7Ci0KLSAgICBlbWl0TG9hZFBh
eWxvYWQoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1QzKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIG1fcHJvZmlsZWRDb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgbV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRp
Zmllcihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7
Ci0gICAgaW50IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGdldHRlciA9IGJ5dGVjb2RlLm1fZ2V0dGVyOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBzZXR0ZXIgPSBieXRlY29kZS5tX3NldHRlcjsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChiYXNl
LCByZWdUMSk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOwotICAgIGVtaXRM
b2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1Q0KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dEdldHRlclNldHRlciwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1Qx
LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIGF0dHJp
YnV0ZXMsIHJlZ1QzLCByZWdUNCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeVZhbD4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGludDMyX3QgYXR0
cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZ2V0
dGVyID0gYnl0ZWNvZGUubV9hY2Nlc3NvcjsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCBy
ZWdUMik7Ci0gICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdExv
YWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyQnlWYWwsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMiwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgYXR0cmlidXRlcywgcmVnVDMpOwotfQotCi12b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0U2V0dGVyQnlWYWw+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNldHRlciA9IGJ5dGVjb2RlLm1fYWNjZXNzb3I7Ci0KLSAg
ICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDIpOwotICAgIGVtaXRMb2FkKHByb3BlcnR5LCBy
ZWdUMSwgcmVnVDApOwotICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1QzKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBtX3Byb2ZpbGVkQ29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIGF0dHJp
YnV0ZXMsIHJlZ1QzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFs
UmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQotewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcywgcmVnVDApOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkNlbGxUYWcpLCByZWdUMSk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKHNjb3BlLCByZWdU
MCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoOyArK2kpCi0gICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0g
ICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3Bl
PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENv
ZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwotICAgIHVuc2lnbmVkIGRl
cHRoID0gbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7Ci0KLSAgICBhdXRvIGVtaXRDb2RlID0g
WyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewotICAgICAgICBzd2l0Y2ggKHJlc29sdmVU
eXBlKSB7Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBj
b25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZl
VHlwZSwgbV9wcm9maWxlZENvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChj
b25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWQz
MigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7Ci0gICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fcHJv
ZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2FsQmlu
ZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Q2VsbFRhZyksIHJlZ1QxKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihj
b25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEs
IHJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBH
bG9iYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczog
Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29u
c3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5
cGUsIG1fcHJvZmlsZWRDb2RlQmxvY2spOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29u
c3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDEpOwotICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0U3Rv
cmUoZHN0LCByZWdUMSwgcmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKGRzdCwgc2NvcGUs
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZGVwdGgpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QxKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsK
LSAgICAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVt
cCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZh
cjoKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9OwotICAgIHN3aXRjaCAocmVz
b2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0Vu
ZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7Ci0KLSAg
ICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBl
KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIG5vdEdsb2Jh
bFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzIDogR2xvYmFsTGV4aWNhbFZhcik7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAg
ICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAg
ICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2
ZVR5cGUsIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAg
ICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0KLSAgICAgICAg
SnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAg
bm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZh
cik7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFs
TGV4aWNhbFZhci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1p
dENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7
Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0K
LSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLX0KLQotdm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZp
cnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkKLXsKLSAgICBl
bWl0TG9hZChzY29wZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3Qs
IHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnIHRhZywgR1BS
UmVnIHBheWxvYWQpCi17Ci0gICAgdWludHB0cl90IHJhd0FkZHJlc3MgPSBiaXR3aXNlX2Nhc3Q8
dWludHB0cl90PihvcGVyYW5kKTsKLSAgICBsb2FkMzIoYml0d2lzZV9jYXN0PHZvaWQqPihyYXdB
ZGRyZXNzICsgVGFnT2Zmc2V0KSwgdGFnKTsKLSAgICBsb2FkMzIoYml0d2lzZV9jYXN0PHZvaWQq
PihyYXdBZGRyZXNzICsgUGF5bG9hZE9mZnNldCksIHBheWxvYWQpOwotfQotdm9pZCBKSVQ6OmVt
aXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcgdGFn
LCBHUFJSZWcgcGF5bG9hZCkKLXsKLSAgICBsb2FkUHRyKG9wZXJhbmQsIHBheWxvYWQpOwotICAg
IGxvYWQzMihBZGRyZXNzKHBheWxvYWQsIFRhZ09mZnNldCksIHRhZyk7Ci0gICAgbG9hZDMyKEFk
ZHJlc3MocGF5bG9hZCwgUGF5bG9hZE9mZnNldCksIHBheWxvYWQpOwotfQotCi12b2lkIEpJVDo6
ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFu
ZCkKLXsKLSAgICBlbWl0TG9hZChzY29wZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBsb2FkMzIoQWRk
cmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBv
cGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSArIFRhZ09mZnNldCksIHJlZ1QxKTsKLSAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVz
KCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpLCByZWdUMCk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNv
ZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0
UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBt
ZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7Ci0gICAg
Ci0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wg
aW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgewotICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7
Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1
Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3Zl
cnMgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVnVDI7Ci0gICAg
ICAgICAgICBHUFJSZWcgcmVzdWx0VGFnID0gcmVnVDE7Ci0gICAgICAgICAgICBHUFJSZWcgcmVz
dWx0UGF5bG9hZCA9IHJlZ1QwOwotICAgICAgICAgICAgR1BSUmVnIG9mZnNldCA9IHJlZ1QzOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBtb3ZlKHJlZ1QwLCBiYXNlKTsKLSAgICAgICAgICAg
IGxvYWQzMihvcGVyYW5kU2xvdCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChBU1NFUlRfRU5B
QkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVh
dGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
KSk7Ci0gICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZM
aW5lKTsKLSAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIGJhc2UpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAg
ICAgIGxvYWQzMihCYXNlSW5kZXgoYmFzZSwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkgKyAoZmlyc3RPdXRPZkxpbmVPZmZzZXQg
LSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHRQYXlsb2FkKTsKLSAgICAgICAg
ICAgIGxvYWQzMihCYXNlSW5kZXgoYmFzZSwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSArIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIp
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdFRhZyk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdsb2JhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9i
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxW
YXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9y
T3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QxLCByZWdUMCk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdp
c2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAg
ICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0g
ICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKLSAg
ICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNb2R1bGVWYXI6
Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIFVucmVzb2x2
ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0
YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihH
ZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQw
Ci0KLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVz
b2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0g
ICAgICAgIGlzTm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUo
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAg
c2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVu
cmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2Fk
MzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVk
SW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUg
aW50byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwot
ICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEds
b2JhbFByb3BlcnR5LCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
LSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwot
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUo
R2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAg
ICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0g
ICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhp
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRD
b2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsK
LSAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3BlcmF0
aW9uR2V0RnJvbVNjb3BlLCBkc3QsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlh
YmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCogc2V0KQotewotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXRO
b3RpZnlXcml0ZShzZXQpOwotICAgIHVpbnRwdHJfdCByYXdBZGRyZXNzID0gYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4ob3BlcmFuZCk7Ci0gICAgc3RvcmUzMihyZWdUMSwgYml0d2lzZV9jYXN0PHZv
aWQqPihyYXdBZGRyZXNzICsgVGFnT2Zmc2V0KSk7Ci0gICAgc3RvcmUzMihyZWdUMCwgYml0d2lz
ZV9jYXN0PHZvaWQqPihyYXdBZGRyZXNzICsgUGF5bG9hZE9mZnNldCkpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJh
bmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hw
b2ludFNldCkKLXsKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBsb2Fk
UHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDIpOwotICAgIGVtaXROb3RpZnlXcml0ZSgq
aW5kaXJlY3RXYXRjaHBvaW50U2V0KTsgLy8gRklYTUU6ID8/Ci0gICAgbG9hZFB0cihhZGRyZXNz
T2ZPcGVyYW5kLCByZWdUMik7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMiwgVGFn
T2Zmc2V0KSk7Ci0gICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhyZWdUMiwgUGF5bG9hZE9mZnNl
dCkpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNj
b3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50
U2V0KiBzZXQpCi17Ci0gICAgZW1pdExvYWQodmFsdWUsIHJlZ1QzLCByZWdUMik7Ci0gICAgZW1p
dExvYWQoc2NvcGUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0g
ICAgc3RvcmUzMihyZWdUMywgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9m
ZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSArIFRhZ09mZnNl
dCkpOwotICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikgKyBQ
YXlsb2FkT2Zmc2V0KSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwotICAgIFZpcnR1
YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm87Ci0gICAg
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Ci0gICAg
U3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3QoKTsK
LSAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Qq
PigmbWV0YWRhdGEubV9vcGVyYW5kKTsKLSAgICAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7Ci0g
ICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eToKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
LSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0gICAgICAgICAgICBlbWl0TG9h
ZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBj
aGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIGVtaXRMb2FkKHZhbHVlLCBy
ZWdUMywgcmVnVDIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAg
IGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKLSAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7
Ci0gICAgICAgICAgICBzdG9yZTMyKHJlZ1QzLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1l
c0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykp
KTsKLSAgICAgICAgICAgIHN0b3JlMzIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRp
bWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5
bG9hZCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2xv
YmFsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0g
ICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3Rh
bnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUs
IG1fcHJvZmlsZWRDb2RlQmxvY2spOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3Rh
bnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZh
bHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7Ci0gICAgICAg
ICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSwgcmVnVDApOwotICAgICAgICAg
ICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkp
ICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewotICAgICAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5
cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgotICAgICAgICAg
ICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBl
bWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVy
YW5kU2xvdCksIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigq
b3BlcmFuZFNsb3QpLCByZWdUMSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmRW1wdHkocmVnVDEpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChp
bmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJp
YWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUs
ICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVy
YW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6Ci0gICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBT
aG91bGRGaWx0ZXJWYWx1ZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBl
bWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwgbWV0YWRhdGEubV93
YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1vZHVsZVZh
cjoKLSAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToK
LSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAg
ICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQ
dXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0
eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAg
SnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVtcCBpc0dsb2JhbExleGljYWxWYXIgPSBicmFu
Y2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEds
b2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsgLy8gRHluYW1p
YywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRlbXB0IHRvIHB1dCBhIHZhbHVlIHRvIGFscmVhZHkt
aW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4KLQotICAgICAgICBpc0dsb2JhbExleGljYWxWYXIu
bGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9i
YWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwot
Ci0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUo
cmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNl
IFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVt
cExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywg
cmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMp
LCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBpc0dsb2JhbFByb3BlcnR5Lmxp
bmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7Ci0gICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4
aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0g
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNh
bFZhci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUo
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7
Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2Nv
cGU+KCk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YSht
X3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBpZiAo
cmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7Ci0gICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93
UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfdGhyb3dfc3RyaWN0
X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJyb3IpOwotICAgICAgICBzbG93UGF0aENh
bGwuY2FsbCgpOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1
dFRvU2NvcGUsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50SW5z
dHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21Bcmd1bWVudHM+KCk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBh
cmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKLSAgICBpbnQgaW5kZXggPSBieXRlY29k
ZS5tX2luZGV4OwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCk7Ci0gICAgCi0gICAgZW1pdExvYWRQYXlsb2FkKGFyZ3VtZW50cywgcmVnVDAp
OwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZz
ZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBUYWdPZmZzZXQp
LCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgRGlyZWN0
QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pICsgUGF5bG9hZE9mZnNldCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0
U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRhZ0dQUigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dFRvQXJndW1lbnRzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBh
cmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKLSAgICBpbnQgaW5kZXggPSBieXRlY29k
ZS5tX2luZGV4OwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
Ci0gICAgCi0gICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7Ci0gICAgCi0gICAgZW1pdExvYWRQYXlsb2FkKGFyZ3VtZW50cywgcmVnVDApOwot
ICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDIpOwotICAgIHN0b3JlMzIocmVnVDEsIEFk
ZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBz
aXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIFRhZ09mZnNldCkpOwotICAgIHN0b3JlMzIo
cmVnVDIsIEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsg
aW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIFBheWxvYWRPZmZzZXQpKTsK
LX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKLSAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0KLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLQot
ICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVn
VDIsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGlu
ZGV4KSArIFRhZ09mZnNldCksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOwotICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QyLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxG
aWVsZChpbmRleCkgKyBQYXlsb2FkT2Zmc2V0KSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwot
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwotICAgIGVt
aXRTdG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigp
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRJbnRlcm5hbEZpZWxkPigpOwotICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4
OwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZCh2YWx1
ZSwgcmVnVDEsIHJlZ1QyKTsKLSAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0lu
dGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkgKyBU
YWdPZmZzZXQpKTsKLSAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBKU0ludGVybmFs
RmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkgKyBQYXlsb2Fk
T2Zmc2V0KSk7Ci0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVy
VmFsdWUpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIEpJVFNsb3dQYXRo
Q2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZ2V0
X3Byb3BlcnR5X2VudW1lcmF0b3IpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywg
Y3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW51bWVyYXRvcl9uZXh0KTsKLSAgICBzbG93
UGF0aENhbGwuY2FsbCgpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBKSVRT
bG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19w
YXRoX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQotewotICAgIFVOUkVB
Q0hBQkxFX0ZPUl9QTEFURk9STSgpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9y
X2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBz
bG93X3BhdGhfZW51bWVyYXRvcl9pbl9ieV92YWwpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIEpJVFNsb3dQYXRoQ2Fs
bCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW51bWVy
YXRvcl9oYXNfb3duX3Byb3BlcnR5KTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCi0jZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJ
bnRlcmZhY2VKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQu
aAppbmRleCA3Y2ExYjRlN2MzZmQwODRkZDI3YWMzODUwNmFhOWM2YWVkOTVkZWIwLi5mMTg2ZmI4
MmIxZmY5NzhkOGY2N2E0ZjA1MzM4ZTljZmI0YzgyMzc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCkBAIC0zNiw3ICszNiw3IEBACiAjaWYgRU5BQkxFKEpJ
VCkKIAogbmFtZXNwYWNlIEpTQyB7Ci0gICAgY2xhc3MgSlNJbnRlcmZhY2VKSVQgOiBwdWJsaWMg
Q0NhbGxIZWxwZXJzLCBwdWJsaWMgR1BSSW5mbywgcHVibGljIEZQUkluZm8geworICAgIGNsYXNz
IEpTSW50ZXJmYWNlSklUIDogcHVibGljIENDYWxsSGVscGVycywgcHVibGljIEdQUkluZm8sIHB1
YmxpYyBKU1JJbmZvLCBwdWJsaWMgRlBSSW5mbyB7CiAgICAgcHVibGljOgogCiAgICAgICAgIEpT
SW50ZXJmYWNlSklUKFZNKiB2bSA9IG51bGxwdHIsIENvZGVCbG9jayogY29kZUJsb2NrID0gbnVs
bHB0cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0
b3JzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcApp
bmRleCAyOTcxNDdlMWM0YzA4ZGNjZDVmN2I3ODY0MTFkODU1YjJhMWRlNDdjLi44ZjhmNjJhNWY1
NjMzODc5M2M5NDY3Yzk3ZWEzOTczNmNkODk5MmRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCkBAIC00MSw4ICs0MSw2IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi0jaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0KIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkK
IHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpAQCAtNjEsNiArNTksOCBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0p
CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAi
aGFuZGxlRXhjZXB0aW9uIik7CiB9CiAKKyNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwog
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25XaXRo
Q2FsbEZyYW1lUm9sbGJhY2tHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIENDYWxsSGVscGVycyBq
aXQ7CkBAIC03NywxNCArNzcsMjAgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tHZW5lcmEKICAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJoYW5kbGVFeGNl
cHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2siKTsKIH0KIAorI2VuZGlmCisKIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRs
ZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAog
I2lmIENQVShYODZfNjQpCiAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MigyICogc2l6ZW9mKENQVVJlZ2lzdGVyKSksIFg4NlJlZ2lzdGVyczo6ZXNwKTsKLSNlbGlmIENQ
VShBUk02NCkKKyNlbGlmIENQVShBUk02NCkgfHwgQ1BVKEFSTV9USFVNQjIpCiAgICAgaml0LnBv
cFBhaXIoQ0NhbGxIZWxwZXJzOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjps
aW5rUmVnaXN0ZXIpOworI2VsaWYgQ1BVKE1JUFMpCisgICAgaml0LnBvcFBhaXIoQ0NhbGxIZWxw
ZXJzOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6cmEpOworI2Vsc2UKKyMg
ICBlcnJvciAiTm90IGltcGxlbWVudGVkIG9uIHBsYXRmb3JtIgogI2VuZGlmCiAKICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgY29udGludWF0aW9uID0gaml0Lmp1bXAoKTsKQEAgLTk1LDYgKzEwMSw4
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcG9wVGh1bmtTdGFja1By
ZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0
Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAicG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRs
ZUV4Y2VwdGlvbiIpOwogfQogCisjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisKIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2hlY2tFeGNlcHRpb25HZW5lcmF0b3Io
Vk0mIHZtKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9UaHVua0dlbmVyYXRvcnMuaAppbmRleCAwZjlmNmUyZDM2ZjZkZDIzZTE4NzI2YWNlNjMx
NGEzMGEyMDFkYmNlLi4yMjc4ZTgwNGNlMDU0NGE3YmU1YTc4YTdlODNmZjVjYWNmZGRjN2QzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKQEAgLTM3LDEy
ICszNywxMiBAQCBjbGFzcyBWTTsKIAogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi1N
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbkdlbmVy
YXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVF
eGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tHZW5lcmF0b3IoVk0mKTsKLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRs
ZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOwogCiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhj
ZXB0aW9uR2VuZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0m
KTsKIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0aHJvd0V4Y2VwdGlv
bkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0mKTsKIAo=
</data>
<flag name="commit-queue"
          id="467758"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443100</attachid>
            <date>2021-11-02 09:22:11 -0700</date>
            <delta_ts>2021-11-03 04:51:52 -0700</delta_ts>
            <desc>v2 - More Windows register conflict fixes</desc>
            <filename>bug-232624-20211102162209.patch</filename>
            <type>text/plain</type>
            <size>212307</size>
            <attacher name="Geza Lore">glore</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1MTU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
NjljMDk1ODkzYTU3MzY3NWM2ODZhYTk5M2ExODVmMzEwMmUxZGEwLi5kZTRiNTg5NTI5ODMxN2Mx
YWM3ZDMyODA1NDViYjJmOTEzOTU1NzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODggQEAKKzIwMjEtMTEtMDIgIEdlemEgTG9yZSAgPGdsb3JlQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0pTQ10gRW5hYmxlIHNoYXJpbmcgb2YgdW5saW5rZWQgYmFzZWxpbmUgY29kZSBv
biBKU1ZBTFVFMzJfNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzMjYyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggY29udGFpbnMgYSBmZXcgZGlmZmVyZW50IGNoYW5nZXMsIHdoaWNo
IHRha2VuIHRvZ2V0aGVyCisgICAgICAgIGVuYWJsZSB0aGUgc2hhcmluZyBvZiB0aGUgdW5saW5r
ZWQgYmFzZWxpbmUgSklUIGNvZGUgYmV0d2VlbiBkaWZmZXJlbnQKKyAgICAgICAgQ29kZUJsb2Nr
cyBvbiBKU1ZBTFVFMzJfNjQgcGxhdGZvcm1zICh0aGUgc2FtZSB3YXkgYXMgdGhpcyBjb2RlIGlz
CisgICAgICAgIHNoYXJlZCBvbiBKU1ZBTFVFNjQgcGxhdGZvcm1zKS4KKworICAgICAgICAxLiBB
IGxvdCBvZiBiYXNlbGluZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIG9wY29kZXMgdGhhdCBuZWVk
ZWQKKyAgICAgICAgY2hhbmdpbmcgZm9yIHRoZSB1bmxpbmtlZCBiYXNlbGluZSBhcmUgbm93IHVu
aWZpZWQgYmV0d2VlbiB0aGUKKyAgICAgICAgSlNWQUxVRTY0IGFuZCBKU1ZBTFVFMzJfNjQgcGxh
dGZvcm1zLiBOb3RlIHRoYXQgd2hpbGUgdGhpcyByZXF1aXJlZAorICAgICAgICBhZGRpbmcgc29t
ZSBhYnN0cmFjdGlvbiwgdGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBiYXNlbGluZSBKSVQgc2hv
dWxkCisgICAgICAgIGJlIGlkZW50aWNhbCB1c2luZyB0aGlzIGFic3RyYWN0aW9uIGNvbXBhcmVk
IHRvIGJlZm9yZS4KKworICAgICAgICAyLiBJIGFkZGVkIGEgSlNSSW5mbyBjbGFzcyB3aGljaCBk
ZWZpbmVzIHN0YW5kYXJkIG5hbWVzIGZvciBjZXJ0YWluCisgICAgICAgIEpTVmFsdWVSZWcgaW5z
dGFuY2VzLiBUaGlzIGVuYWJsZXMgYSBsb3Qgb2YgdGhlIHVuaWZpY2F0aW9uIGluIHRoZQorICAg
ICAgICBwb2ludCBhYm92ZSB0byBiZSBhIHNpbXBsZSB0cmFuc2Zvcm1hdGlvbi4gQWdhaW4sIHRo
aXMgc2hvdWxkIGhhdmUgbm8KKyAgICAgICAgaW1wYWN0IG9uIHRoZSBnZW5lcmF0ZWQgY29kZSBv
biBKU1ZBTFVFNjQsIGFwYXJ0IGZyb20gc29tZSByZWdpc3RlcgorICAgICAgICBzdWJzdGl0dXRp
b25zLgorCisgICAgICAgIDMuIFRoZSBzaXplcyBvZiB0aGUgcmVzb2x2ZV9zY29wZSBhbmQgZ2V0
X2Zyb21fc2NvcGUgb3BzIGluY3JlYXNlZAorICAgICAgICBzaWduaWZpY2FudGx5IHdpdGggdGhl
IHVubGlua2VkIGJhc2VsaW5lLiBUaGlzIGNhbiBjYXVzZSBpc3N1ZXMgb24KKyAgICAgICAgc29t
ZSBKU1ZBTFVFMzJfNjQgdGFyZ2V0cyB3aGVyZSBtZW1vcnkgaXMgbW9yZSBwcmVjaW91cywgc28g
Zm9yIHRoZXNlCisgICAgICAgIHR3byBvcHMgSSBzd2FwcGVkIGluIHRoZSBpbXBsZW1lbnRhdGlv
bnMgdW5kZXIgRVhUUkFfQ1RJX1RIVU5LUywgd2hpY2gKKyAgICAgICAgaW1wbGVtZW50IHRoZXNl
IHVzaW5nIHNoYXJlZCBzdHVicy4gVGhlc2Ugc3R1YnMgd29yayBvbiBhbGwgcGxhdGZvcm1zCisg
ICAgICAgIHRoYXQgc3VwcG9ydCBFTkFCTEUoSklUKSwgc28gdGhleSBhcmUgbm93IHRoZSBvbmx5
IGltcGxlbWVudGF0aW9uIGFuZAorICAgICAgICBJIGhhdmUgcmVtb3ZlZCB0aGUgYmFzaWMgYmxv
YXRlZCB2ZXJzaW9ucy4gTm90ZSBwdXRfdG9fc2NvcGUgc3VmZmVycworICAgICAgICBmcm9tIHRo
ZSBzYW1lIGNvZGUgc2l6ZSBpbmNyZWFzZSBidXQgY3VycmVudGx5IGRvZXMgbm90IGhhdmUgYSBz
aGFyZWQKKyAgICAgICAgc3R1YiBiYXNlZCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyBPSyBmb3Ig
bm93IHRvIHBhc3MgdGhlIHRlc3Qgc3VpdGVzCisgICAgICAgIG9uIEpTVkFMVUUzMl82NCwgYnV0
IHByb2JhYmx5IHNob3VsZCBiZSBhZGRyZXNzZWQgbGF0ZXIuCisKKyAgICAgICAgNC4gUmVtb3Zl
ZCBzb21lIHVudXNlZCBjb2RlIGFuZCBmaWVsZHMgSSBkaXNjb3ZlcmVkIHdoaWxlIHdvcmtpbmcg
b24KKyAgICAgICAgdGhpcywgc3RyaWN0bHkgc3BlYWtpbmcgdGhpcyBpcyBub3QgbmVjZXNzYXJ5
IGZvciB0aGUgZnVuY3Rpb25hbAorICAgICAgICBjaGFuZ2UuCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjpzdG9yZVZhbHVlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpp
c051bGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmlzTm90TnVsbCk6CisgICAg
ICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFR1cm5VbmRlZmluZWRJbnRvTnVsbCk6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6bm9PdmVybGFwKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpub092ZXJsYXBJbXBsKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjpub092ZXJsYXBJbXBsUmVnTWFzayk6CisgICAgICAgICogaml0L0dQUkluZm8uaDoK
KyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcyk6CisgICAgICAgIChKU0M6OkpJVDo6bGluayk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycyk6CisgICAgICAgICogaml0L0pJVC5o
OgorICAgICAgICAqIGppdC9KSVRBcml0aG1ldGljLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wSW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJl
VW5zaWduZWRBbmRKdW1wSW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlVW5z
aWduZWRJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX21vZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9j
b21wYXJlVW5zaWduZWRBbmRKdW1wKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVV
bnNpZ25lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3cpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcCk6CisgICAgICAgICogaml0L0pJ
VEFyaXRobWV0aWMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF91bnNpZ25l
ZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbmMpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZGVjKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVTZXR1cEZyYW1l
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgICogaml0L0pJVElubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFudE9wZXJhbmQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0
VmlydHVhbFJlZ2lzdGVyVGFnKToKKyAgICAgICAgKEpTQzo6bG9hZEFkZHJPZkNvZGVCbG9ja0Nv
bnN0YW50QnVmZmVyKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkQ29kZUJsb2NrQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudFBheWxvYWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudFRhZyk6CisgICAgICAgICogaml0
L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbW92KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2VuZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9u
ZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfamZhbHNlKToKKyAgICAgICAgKEpTQzo6SklUOjp2YWx1ZUlzRmFsc2V5R2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2plcV9udWxsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2puZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXFf
cHRyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2plcSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdHJ1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6dmFs
dWVJc1RydXRoeUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXEpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0RXEpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRj
aF9jaGFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9uZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b190aGlzKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmND
b21tb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5j
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2lzX2VtcHR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2Jvb2xlYW4pOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2lzX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX25vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdW5kZWZp
bmVkX29yX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3Jf
bnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXFfcHRyKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Vx
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lcSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9qZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcEVxSnVtcFNsb3cp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcSk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVPcFN0cmljdEVxSnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfanN0
cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX251bWJlcik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF90b19udW1lcmljKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3N0cmlu
Zyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19vYmplY3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9lbnRlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jaGVja190ZHopOgorICAg
ICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wdXRfZ2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9z
ZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0
ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29w
X3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0
X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVU
aHVuayk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3B1dF90b19hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9pbnRl
cm5hbF9maWVsZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcHJvcGVydHlfZW51
bWVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0V3JpdGVCYXJyaWVyKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaml0L0pTSW50ZXJmYWNlSklULmg6Cisg
ICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OnBvcFRodW5r
U3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOgorICAgICAgICAqIGpp
dC9UaHVua0dlbmVyYXRvcnMuaDoKKwogMjAyMS0xMS0wMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBh
cHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHNvbWUgdW51c2VkIEhlYXAgZmllbGRzLgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlYzU2YzEwZWFhMGU0ZjA2YTJlMzBlM2FhYjY0
NmEwZjBkYmI2OGM4Li44OTBiNTBjNjY3OGU2NDhhNDEwNGI5ZDZkZTAyNzRlNGI5NGVlMmRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDc3OCw3ICs0Nzc4LDYgQEAKIAkJQTdC
RkYzQkYxNzk4Njg5NDAwMDJGNDYyIC8qIERGR0ZpbHRyYXRpb25SZXN1bHQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRmlsdHJhdGlvblJlc3VsdC5oOyBwYXRoID0gZGZn
L0RGR0ZpbHRyYXRpb25SZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdD
MEM0QUExNjdDMDhDRDAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU2NyaXB0UmVmLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTdDMEM0QUIxNjdDMDhDRDAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJpdmF0
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NjcmlwdFJlZlByaXZhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTdDMUU4QzgxMTJFNzAxQzAwQTM3Rjk4
IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE3QzFFQUVCMTc5ODdBQjYwMDI5OURCMiAvKiBDTG9vcFN0YWNrSW5saW5l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDTG9vcFN0YWNrSW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0MxRUFFQzE3OTg3QUI2MDAyOTlEQjIg
LyogU3RhY2tWaXNpdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbGluZUVu
ZGluZyA9IDA7IHBhdGggPSBTdGFja1Zpc2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBN0MxRUFFRDE3OTg3QUI2MDAyOTlEQjIgLyogU3RhY2tWaXNpdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YWNrVmlzaXRvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNjQwNCw3ICs2NDAzLDYgQEAKIAkJCQk3MjZCOTFBRjI2NTgxNjUz
MDA4RTZGODIgLyogSklUUGxhbi5oICovLAogCQkJCTcyMTMxQkY2MjY1ODdFRjIwMDcxMTRDRiAv
KiBKSVRQbGFuU3RhZ2UuaCAqLywKIAkJCQk4NkNDODVDMzBFRTdBODk0MDAyODg2ODIgLyogSklU
UHJvcGVydHlBY2Nlc3MuY3BwICovLAotCQkJCUE3QzFFOEM4MTEyRTcwMUMwMEEzN0Y5OCAvKiBK
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCAqLywKIAkJCQlGRTNBMDZCODFDMTEwM0Q5MDAzOTBG
REQgLyogSklUUmlnaHRTaGlmdEdlbmVyYXRvci5jcHAgKi8sCiAJCQkJRkUzQTA2QjkxQzExMDNE
OTAwMzkwRkREIC8qIEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCAqLywKIAkJCQk3MjEzMUJGMzI2
NTg3RUYyMDA3MTE0Q0YgLyogSklUU2FmZXBvaW50LmNwcCAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dAppbmRleCBkZDhjYjYyNzI0MWJlODhjZWVmMDc0NTljODVlZjNjOGE5ZjhjODM3Li4w
NTNmMzFjYzJjOTkxMDM5MTI4ZGU4Yzg2ZjcyOWNkMjc4MWMzNWFlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXMudHh0CkBAIC02NTksNyArNjU5LDYgQEAgaml0L0pJVE9wY29kZXMzMl82NC5jcHAK
IGppdC9KSVRPcGVyYXRpb25zLmNwcAogaml0L0pJVFBsYW4uY3BwCiBqaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCi1qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKIGppdC9KSVRSaWdodFNo
aWZ0R2VuZXJhdG9yLmNwcAogaml0L0pJVFNhZmVwb2ludC5jcHAKIGppdC9KSVRTaXplU3RhdGlz
dGljcy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCmlu
ZGV4IDI0NGYyMjI3OTJjNzBmODFhZDA3NzEwN2ExNjYzMzJkYzczMWVmMGYuLjQ5ZWVmNDcwYThi
NTUxMmVlODE1NWY5OGE1Zjk0NjQ5ZWVmMmQ0NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaApAQCAtMjc2LDcgKzI3NiwxNyBAQCBwdWJsaWM6CiAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKHZhbHVlLnBheWxvYWQoKSksIHJlZ3MucGF5bG9hZEdQUigp
KTsKICNlbmRpZgogICAgIH0KLSAgICAKKworICAgIHZvaWQgc3RvcmVWYWx1ZShKU1ZhbHVlIHZh
bHVlLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAg
IHN0b3JlNjQoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3MpOworI2VsaWYg
VVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgc3RvcmUzMihJbW0zMih2YWx1ZS50YWcoKSksIGFk
ZHJlc3Mud2l0aE9mZnNldChUYWdPZmZzZXQpKTsKKyAgICAgICAgc3RvcmUzMihJbW0zMih2YWx1
ZS5wYXlsb2FkKCkpLCBhZGRyZXNzLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCkpOworI2VuZGlm
CisgICAgfQorCiAgICAgdm9pZCBzdG9yZVRydXN0ZWRWYWx1ZShKU1ZhbHVlIHZhbHVlLCBBZGRy
ZXNzIGFkZHJlc3MpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0xMDQ1LDYgKzEwNTUs
MjQgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCisgICAgdm9pZCBpc051bGwoSlNWYWx1ZVJl
Z3MgcmVncywgR1BSUmVnIGRzdCkKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAg
Y29tcGFyZTY0KEVxdWFsLCByZWdzLnBheWxvYWRHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlZhbHVlTnVsbCksIGRzdCk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBjb21w
YXJlMzIoRXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFn
KSwgZHN0KTsKKyNlbmRpZgorICAgIH0KKworICAgIHZvaWQgaXNOb3ROdWxsKEpTVmFsdWVSZWdz
IHJlZ3MsIEdQUlJlZyBkc3QpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGNv
bXBhcmU2NChOb3RFcXVhbCwgcmVncy5wYXlsb2FkR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZU51bGwpLCBkc3QpOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgY29t
cGFyZTMyKE5vdEVxdWFsLCByZWdzLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVs
bFRhZyksIGRzdCk7CisjZW5kaWYKKyAgICB9CisKICAgICBKdW1wIGJyYW5jaElmTnVsbChHUFJS
ZWcgZ3ByKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMTExNCw2ICsxMTQyLDE3IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3RQdHIoWmVybywgc3RyaW5nSW1wbEdQ
UiwgVHJ1c3RlZEltbTMyKEpTU3RyaW5nOjppc1JvcGVJblBvaW50ZXIpKTsKICAgICB9CiAKKyAg
ICB2b2lkIGVtaXRUdXJuVW5kZWZpbmVkSW50b051bGwoSlNWYWx1ZVJlZ3MgcmVncykKKyAgICB7
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgc3RhdGljX2Fzc2VydCgoSlNWYWx1ZTo6VmFs
dWVVbmRlZmluZWQgJiB+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSA9PSBKU1ZhbHVlOjpWYWx1ZU51
bGwpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHJlZ3MucGF5bG9hZEdQUigpKTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHN0
YXRpY19hc3NlcnQoKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyB8IDEpID09IEpTVmFsdWU6Ok51bGxU
YWcpOworICAgICAgICBvcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVncy50YWdHUFIoKSk7CisjZW5k
aWYKKyAgICB9CisKICAgICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9yQnl0ZU9mZnNldChwdHJk
aWZmX3QgYnl0ZU9mZnNldCkKICAgICB7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBieXRlT2Zmc2V0KTsKQEAgLTE4NDUsNiArMTg4NCw0OSBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGJvb2wgc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNy
b1NjcmF0Y2hSZWdpc3RlcigpOwogI2VuZGlmCiAKKyAgICAvLyBDaGVja3MgdGhhdCB0aGUgZ2l2
ZW4gbGlzdCBvZiBHUFJSZWdzIGFuZCBKU1ZhbHVlUmVncyBkbyBub3Qgb3ZlcmxhcC4gVXNlIHRo
aXMgaW4gc3RhdGljCisgICAgLy8gYXNzZXJ0aW9ucyB0byBlbnN1cmUgdGhhdCByZWdpc3RlciBh
bGlhc2VzIGxpdmUgYXQgdGhlIHNhbWUgcG9pbnQgZG8gbm90IG1hcCB0byB0aGUgc2FtZQorICAg
IC8vIGFyY2hpdGVjdHVyYWwgcmVnaXN0ZXIuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEFy
Z3M+CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5vT3ZlcmxhcChBcmdzLi4uIGFyZ3MpIHsg
cmV0dXJuIG5vT3ZlcmxhcEltcGwoMCwgYXJncy4uLik7IH0KKworcHJpdmF0ZToKKyAgICAvLyBC
YXNlIGNhc2UKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbm9PdmVybGFwSW1wbCh1aW50NjRfdCkgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgLy8gR1BSUmVnIGNhc2UKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbm9PdmVybGFwSW1wbCh1aW50NjRfdCB1c2VkLCBSZWdpc3Rl
cklEIGdwciwgQXJncy4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbWFzayA9IG5v
T3ZlcmxhcEltcGxSZWdNYXNrKGdwcik7CisgICAgICAgIGlmICh1c2VkICYgbWFzaykKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG5vT3ZlcmxhcEltcGwodXNlZCB8
IG1hc2ssIGFyZ3MuLi4pOworICAgIH0KKworICAgIC8vIEpTVmFsdWVSZWdzIGNhc2UKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbm9P
dmVybGFwSW1wbCh1aW50NjRfdCB1c2VkLCBKU1ZhbHVlUmVncyBqc3IsIEFyZ3MuLi4gYXJncykK
KyAgICB7CisgICAgICAgIHVuc2lnbmVkIG1hc2sgPSBub092ZXJsYXBJbXBsUmVnTWFzayhqc3Iu
cGF5bG9hZEdQUigpKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBtYXNrIHw9IG5v
T3ZlcmxhcEltcGxSZWdNYXNrKGpzci50YWdHUFIoKSk7CisjZW5kaWYKKyAgICAgICAgaWYgKHVz
ZWQgJiBtYXNrKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbm9P
dmVybGFwSW1wbCh1c2VkIHwgbWFzaywgYXJncy4uLik7CisgICAgfQorCisgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBub092ZXJsYXBJbXBsUmVnTWFzayhSZWdpc3RlcklEIGdwcikKKyAg
ICB7CisgICAgICAgIGlmIChncHIgPT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIHJldHVy
biAwVUxMOworICAgICAgICB1bnNpZ25lZCBiaXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZ3By
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYml0IDwgc2l6ZW9mKHVpbnQ2NF90KSAqIENIQVJf
QklUKTsKKyAgICAgICAgcmV0dXJuIDFVTEwgPDwgYml0OworICAgIH0KKwogcHJvdGVjdGVkOgog
ICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBs
KEdQUlJlZyBjYWxsZWVTYXZlc0J1ZmZlcik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvR1BSSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZv
LmgKaW5kZXggYjIwZTMzMWI1NWNmMzJhMTI5MTcxOTIwMDUzZTg1YzQ0ZDVhMTNkOS4uM2Y4ODNl
NWUxMWU2M2MxNjg0ZmVmNDlhYTQzZjJiNjIzMzQ2MzQzZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9HUFJJbmZvLmgKQEAgLTkyMCwxMyArOTIwLDQzIEBAIHB1YmxpYzoKIAogI2VuZGlmIC8vIENQ
VShSSVNDVjY0KQogCisvLyBUbyBtYWtlIHNvbWUgY29kZSBnZW5lcmljIG92ZXIgYm90aCBKU1ZB
TFVFNjQgYW5kIEpTVkFMVUUzMl82NCBwbGF0Zm9ybXMsIHdlIHVzZSBzdGFuZGFyZCBuYW1lcwor
Ly8gZm9yIGNlcnRhaW4gSlNWYWx1ZVJlZ3MgaW5zdGFuY2VzLiBPbiBKU1ZBTFVFNjQsIGEgSlNW
YWx1ZVJlZ3MgY29ycmVzcG9uZHMgdG8gYSBzaW5nbGUgNjQtYml0CisvLyBhcmNoaXRlY3R1cmFs
IEdQUiwgd2hpbGUgb24gSlNWQUxVRTMyXzY0LCBhIEpTVmFsdWVSZWdzIGNvcnJlc3BvbmRzIHRv
IGEgcGFpciBvZiAzMi1iaXQKKy8vIGFyY2hpdGVjdHVyYWwgR1BScy4gTmV2ZXJ0aGVsZXNzLCBh
IGxvdCBvZiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0YXJnZXRzIGNhbiBiZSBhYnN0cmFj
dGVkCisvLyBvdmVyIHVzaW5nIHRoZSBmb2xsb3dpbmcgYWxpYXNlcy4gU2VlIEFzc2VtYmx5SGVs
cGVyOjpub092ZXJsYXAgZm9yIGNhdGNoaW5nIGNvbmZsaWN0aW5nIHJlZ2lzdGVyCisvLyBhbGlh
c2luZyBzdGF0aWNhbGx5LgorY2xhc3MgSlNSSW5mbyB7CitwdWJsaWM6CisgICAgLy8gVGVtcG9y
YXJ5IHJlZ2lzdGVycy4KKyAgICAvLyBPbiBKU1ZBTFVFNjQsIGpzUmVnVHsyKm4rMX17MipufSBh
bHdheXMgbWFwcyBvbmUtdG8tb25lIHRvIEdQUiByZWdUezIqbn0KKyAgICAvLyBPbiBKU1ZBTFVF
MzJfNjQsIGpzUmVnVHsyKm4rMX17MipufSBhbHdheXMgbWFwcyB0byB0aGUgR1BSIHBhaXIgcmVn
VHsyKm4rMX0gLyByZWdUezIqbn0KKyAgICAvLyBUaGlzIG1hcHBpbmcgaXMgZGVsaWJlcmF0ZWx5
IHNpbXBsZSB0byBlYXNlIHJlYXNvbmluZyBhYm91dCBhbGlhc2luZy4gRS5nLjoKKyAgICAvLyBT
ZWVpbmcgJ2pzUmVnVDEwJyBpbmRpY2F0ZXMgdGhhdCBpbiBnZW5lcmFsIGJvdGggJ3JlZ1QxJyBh
bmQgJ3JlZ1QwJyBtYXkgYmUgdXNlZC4KKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHN0YXRpYyBj
b25zdGV4cHIgSlNWYWx1ZVJlZ3MganNSZWdUMTAgeyBHUFJJbmZvOjpyZWdUMCB9OworICAgIHN0
YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MganNSZWdUMzIgeyBHUFJJbmZvOjpyZWdUMiB9Owor
I2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBzdGF0aWMgY29uc3RleHByIEpTVmFsdWVSZWdz
IGpzUmVnVDEwIHsgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwIH07CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBqc1JlZ1QzMiB7IEdQUkluZm86OnJlZ1QzLCBHUFJJbmZv
OjpyZWdUMiB9OworI2VuZGlmCisKKyAgICAvLyBSZXR1cm4gdmFsdWUgcmVnaXN0ZXIKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmV0dXJuVmFs
dWVKU1IgeyBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiB9OworI2VsaWYgVVNFKEpTVkFMVUUzMl82
NCkKKyAgICBzdGF0aWMgY29uc3RleHByIEpTVmFsdWVSZWdzIHJldHVyblZhbHVlSlNSIHsgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiB9OworI2VuZGlm
Cit9OworCiAvLyBUaGUgYmFzZWxpbmUgSklUIHVzZXMgImFjY3VtdWxhdG9yIiBzdHlsZSBleGVj
dXRpb24gd2l0aCByZWdUMCAoZm9yIDY0LWJpdCkKIC8vIGFuZCByZWdUMCArIHJlZ1QxIChmb3Ig
MzItYml0KSBzZXJ2aW5nIGFzIHRoZSBhY2N1bXVsYXRvciByZWdpc3RlcihzKSBmb3IKIC8vIHBh
c3NpbmcgcmVzdWx0cyBvZiBvbmUgb3Bjb2RlIHRvIHRoZSBuZXh0LiBIZW5jZToKLUNPTVBJTEVf
QVNTRVJUKEdQUkluZm86OnJlZ1QwID09IEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZWdUMF9t
dXN0X2VxdWFsX3JldHVyblZhbHVlR1BSKTsKK3N0YXRpY19hc3NlcnQoR1BSSW5mbzo6cmVnVDAg
PT0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi1DT01Q
SUxFX0FTU0VSVChHUFJJbmZvOjpyZWdUMSA9PSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIHJl
Z1QxX211c3RfZXF1YWxfcmV0dXJuVmFsdWVHUFIyKTsKK3N0YXRpY19hc3NlcnQoR1BSSW5mbzo6
cmVnVDEgPT0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKICNlbmRpZgorc3RhdGljX2Fzc2Vy
dChKU1JJbmZvOjpqc1JlZ1QxMCA9PSBKU1JJbmZvOjpyZXR1cm5WYWx1ZUpTUik7CiAKIGlubGlu
ZSBHUFJSZWcgZXh0cmFjdFJlc3VsdChHUFJSZWcgcmVzdWx0KSB7IHJldHVybiByZXN1bHQ7IH0K
ICNpZiBVU0UoSlNWQUxVRTY0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IDkyOTQy
NDYwNzM0MDA5MTFiNmMzNTdjNzhhNGEwYzZhNzRlOWFhZDQuLjIyOGNmODZlMzcyYjhkOTVjODcz
Y2IwNTc0ZTQwMDE0OTYxZmQ5MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTY0
NCw5ICs2NDQsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZGVsX2J5X3ZhbCkKICAgICAgICAgREVGSU5FX1NMT1dD
QVNFX09QKG9wX2RlbF9ieV9pZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3N1YikK
LSNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9P
UChvcF9nZXRfZnJvbV9zY29wZSkKLSNlbmRpZgogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Ao
b3BfcHV0X3RvX3Njb3BlKQogCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRv
cl9vcGVuKQpAQCAtMTAxOSwxMSArMTAxNiw3IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICBtX2pp
dENvZGUtPm1faml0Q29kZU1hcCA9IGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXplKCk7CiAgICAg
bV9qaXRDb2RlLT5hZG9wdE1hdGhJQ3MobV9tYXRoSUNzKTsKICAgICBtX2ppdENvZGUtPm1fY29u
c3RhbnRQb29sID0gV1RGTW92ZShtX2NvbnN0YW50UG9vbCk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICBtX2ppdENvZGUtPm1faXNTaGFyZWFibGUgPSBtX2lzU2hhcmVhYmxlOwotI2Vsc2UKLSAg
ICBtX2ppdENvZGUtPm1faXNTaGFyZWFibGUgPSBmYWxzZTsKLSNlbmRpZgogCiAgICAgaWYgKEpJ
VEludGVybmFsOjp2ZXJib3NlKQogICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2Rl
IGZvciAlcCBhdCBbJXAsICVwKS5cbiIsIG1fdW5saW5rZWRDb2RlQmxvY2ssIHJlc3VsdC5leGVj
dXRhYmxlTWVtb3J5KCktPnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVN
ZW1vcnkoKS0+ZW5kKCkudW50YWdnZWRQdHIoKSk7CkBAIC0xMDgwLDcgKzEwNzMsNiBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycygpCiAgICAgfQogCiAgICAgaWYg
KCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKSB7Ci0gICAgICAgIG1fZXhjZXB0aW9uSGFuZGxl
ciA9IGxhYmVsKCk7CiAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmxpbmsodGhpcyk7CiAKICAg
ICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50
b3BFbnRyeUZyYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IGRlMmM1Y2U3NzBiYmQ1
OTNiN2FlNWZkMWE2NTI2NzM4OTQzZGQ5YTEuLjAzNWU2NmQ3OTk1MjRlMmZhODIyZTEyMWM0ZTI5
NmI4ZDBjNjhiMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtMjU0LDcgKzI1NCwxMSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBsb2FkQ29uc3RhbnQodW5zaWduZWQgY29u
c3RhbnRJbmRleCwgR1BSUmVnKTsKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGxvYWRHbG9i
YWxPYmplY3QoR1BSUmVnKTsKLSAgICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmly
dHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworICAgICAgICB2b2lkIGxvYWRDb2RlQmxvY2tDb25zdGFu
dChWaXJ0dWFsUmVnaXN0ZXIsIEpTVmFsdWVSZWdzKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQor
ICAgICAgICB2b2lkIGxvYWRDb2RlQmxvY2tDb25zdGFudFBheWxvYWQoVmlydHVhbFJlZ2lzdGVy
LCBSZWdpc3RlcklEKTsKKyAgICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnRUYWcoVmly
dHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKTsKKyNlbmRpZgogCiAgICAgICAgIHZvaWQgZW1pdFB1
dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQgPSByZWdUMCk7CiAKQEAg
LTM1MSw2ICszNTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZW51bSBGaW5hbE9iamVj
dE1vZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07CiAKICAgICAgICAgdm9pZCBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRzdCk7
CisgICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoVmlydHVhbFJlZ2lz
dGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpOwogICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3Mgc3JjKTsKICAgICAgICAgdm9p
ZCBlbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyLCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdp
c3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7CiAKQEAgLTM2MSwxMiArMzY2LDkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgZ2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1
YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIFZpcnR1YWxSZWdpc3RlciYgb3As
IGludDMyX3QmIGNvbnN0YW50KTsKIAogICAgICAgICB2b2lkIGVtaXRMb2FkRG91YmxlKFZpcnR1
YWxSZWdpc3RlciwgRlBSZWdpc3RlcklEIHZhbHVlKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZFRh
ZyhWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnKTsKLSAgICAgICAgdm9pZCBlbWl0TG9h
ZFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQpOwogCi0gICAgICAg
IHZvaWQgZW1pdExvYWQoY29uc3QgSlNWYWx1ZSYgdiwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVy
SUQgcGF5bG9hZCk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWQoVmlydHVhbFJlZ2lzdGVyLCBSZWdp
c3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJh
bWVSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgZW1pdExvYWQyKFZpcnR1YWxSZWdpc3RlciwgUmVn
aXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lz
dGVySUQgdGFnMiwgUmVnaXN0ZXJJRCBwYXlsb2FkMik7CisgICAgICAgIHZvaWQgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0
ZXJJRCBwYXlsb2FkKTsKKyAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKFZp
cnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KTsKIAogICAgICAgICB2b2lkIGVtaXRT
dG9yZShWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQs
IFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAgdm9pZCBlbWl0
U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRl
eElzSW50MzIgPSBmYWxzZSk7CkBAIC0zODcsNyArMzg5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCk7Ci0gICAgICAgIHZv
aWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoVmlydHVhbFJlZ2lzdGVyIHNyYzEsIFJlZ2lzdGVy
SUQgZHN0MSwgVmlydHVhbFJlZ2lzdGVyIHNyYzIsIFJlZ2lzdGVySUQgZHN0Mik7CiAgICAgICAg
IHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3Rl
cklEIGZyb20gPSByZWdUMCk7CiAgICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVn
aXN0ZXIgZHN0LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgLyogb25seSB1c2VkIGluIEpTVmFs
dWUzMl82NCAqLyA9IGZhbHNlKQogICAgICAgICB7CkBAIC02NDcsOSArNjQ4LDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25z
dCBJbnN0cnVjdGlvbiopOwotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSNlbmRpZgogICAgICAgICB2b2lkIGVtaXRT
bG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKIAogICAgICAgICB2b2lkIGVtaXRTbG93Q2FzZUNhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgU2xvd1BhdGhG
dW5jdGlvbik7CkBAIC02NzEsMjEgKzY2OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIGVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2
b2lkIGVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBH
UFJSZWcpOwogICAgICAgICB2b2lkIGVtaXRWYXJSZWFkT25seUNoZWNrKFJlc29sdmVUeXBlLCBH
UFJSZWcgc2NyYXRjaEdQUik7Ci0gICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1
YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVj
dGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOwotICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0
cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJl
U2xvdCk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbVBv
aW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsKLSAgICAgICAgdm9pZCBlbWl0R2V0VmFy
RnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnKTsKLSNlbHNlCi0g
ICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJh
bmQsIEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkKTsKLSAgICAgICAgdm9pZCBlbWl0R2V0VmFy
RnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnIHRhZywgR1BSUmVnIHBheWxvYWQp
OwotI2VuZGlmCi0gICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVy
IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRl
KFdhdGNocG9pbnRTZXQqKTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50
KEdQUlJlZyBwb2ludGVyVG9TZXQpOwotICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJs
ZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQq
KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiog
YWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kiop
OwotICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwg
dWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCop
OwogCiAgICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIpOwogCkBA
IC03MzMsMTQgKzcxOCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzRmFsc2V5R2VuZXJhdG9y
KFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IoVk0mKTsKLQorI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJik7CiAgICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfcmVz
b2x2ZV9zY29wZUdlbmVyYXRvcihWTSYpOwogICAgICAgICB0ZW1wbGF0ZSA8UmVzb2x2ZVR5cGU+
CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdl
bmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYpOwogICAgICAgICB0ZW1wbGF0ZSA8UmVzb2x2
ZVR5cGU+CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhWTSYpOwotI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCiAgICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKICAgICAgICAgewpAQCAtOTg3LDkgKzk3MSw2IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzOwog
ICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjazsK
LSNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIExhYmVsIG1fZXhjZXB0aW9u
SGFuZGxlcjsKLSNlbmRpZgogCiAgICAgICAgIHVuc2lnbmVkIG1fZ2V0QnlJZEluZGV4IHsgVUlO
VF9NQVggfTsKICAgICAgICAgdW5zaWduZWQgbV9nZXRCeVZhbEluZGV4IHsgVUlOVF9NQVggfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCmluZGV4IDhmMWE3
YzViODM0NjEwYWEwYjhhZmM4MzE3YjkxY2RlMDE3NGU2YjMuLjhmNGQ4MGI5OWNmYzllOTFmZTIz
M2Q0YmU5MjZmNTYzN2Y2NmVjNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQXJpdGhtZXRpYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRB
cml0aG1ldGljLmNwcApAQCAtMjEwLDcgKzIxMCw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVB
bmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCB1bnNp
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhv
cDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwg
cmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7CiAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQocmVnVDEpOwogCkBAIC0yMzgsNyArMjM5LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVu
c2lnbmVkQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG8K
ICAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKICAg
ICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QxLCBJbW0zMihv
cDFpbW0pKSwgdGFyZ2V0KTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIs
IHJlZ1QxKTsKICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCByZWdU
MSksIHRhcmdldCk7CiAgICAgfQogfQpAQCAtMjY0LDcgKzI2Niw4IEBAIHZvaWQgSklUOjplbWl0
X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVy
IG9wMSwgVmlyCiAgICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50
KG9wMSk7CiAgICAgICAgIGNvbXBhcmUzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QwLCBJbW0z
MihvcDFpbW0pLCByZWdUMCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByZWdUMSk7CiAgICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCByZWdUMSwgcmVn
VDApOwogICAgIH0KICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OwpAQCAtNDIyLDcgKzQyNSw4IEBAIHZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEFTU0VSVChyZWdUNCAhPSBlZHgpOwogICAg
IEFTU0VSVChyZWdUNCAhPSBlY3gpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3Ax
LCByZWdUNCwgb3AyLCBlY3gpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdU
NCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGVjeCk7CiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KHJlZ1Q0KTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoZWN4
KTsKIApAQCAtNDgwLDcgKzQ4NCw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvCiAKICAgICAv
LyBDaGFyYWN0ZXIgbGVzcy4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsK
LSAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMSwgcmVnVDApOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEsIHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAgICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOwogICAgICAg
ICBlbWl0TG9hZENoYXJhY3RlclN0cmluZyhyZWdUMCwgcmVnVDAsIGZhaWx1cmVzKTsKQEAgLTQ4
OSw3ICs0OTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpbwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewotICAgICAgICBlbWl0
TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AxLCByZWdUMSwgcmVnVDApOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwo
cmVnVDEpKTsKICAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7CiAgICAgICAgIGVtaXRMb2FkQ2hh
cmFjdGVyU3RyaW5nKHJlZ1QwLCByZWdUMCwgZmFpbHVyZXMpOwpAQCAtNDk4LDE1ICs1MDIsMTYg
QEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW8KICAgICAgICAgcmV0dXJuOwogICAgIH0gCiAgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgZW1pdExvYWQob3AyLCBy
ZWdUMywgcmVnVDIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDMs
IHJlZ1QyKTsKICAgICAgICAgbm90SW50MzJPcDIuYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmVn
VDMpKTsKICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1Qy
LCBJbW0zMihnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCkpKSwgdGFyZ2V0KTsKICAg
ICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdExv
YWQob3AxLCByZWdUMSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgcmVnVDEsIHJlZ1QwKTsKICAgICAgICAgbm90SW50MzJPcDEuYXBwZW5kKGJyYW5jaElmTm90
SW50MzIocmVnVDEpKTsKICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJlZ1Qw
LCBJbW0zMihnZXRDb25zdGFudE9wZXJhbmQob3AyKS5hc0ludDMyKCkpKSwgdGFyZ2V0KTsKICAg
ICB9IGVsc2UgewotICAgICAgICBlbWl0TG9hZDIob3AxLCByZWdUMSwgcmVnVDAsIG9wMiwgcmVn
VDMsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCBy
ZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMywgcmVnVDIp
OwogICAgICAgICBub3RJbnQzMk9wMS5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdUMSkpOwog
ICAgICAgICBub3RJbnQzMk9wMi5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdUMykpOwogICAg
ICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsK
QEAgLTUzMywxMyArNTM4LDE0IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1
bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsCiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0
TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCByZWdUMywgcmVnVDIpOwogICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29u
ZGl0aW9uKSwgcmVnVDIsIEltbTMyKGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIoKSkp
LCB0YXJnZXQpOwogICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewot
ICAgICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCByZWdUMSwgcmVnVDApOwogICAgICAgICBhZGRKdW1wKGJyYW5jaDMy
KGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKGdldENvbnN0YW50T3BlcmFuZChvcDIpLmFzSW50MzIo
KSkpLCB0YXJnZXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRMb2FkMihvcDEsIHJlZ1Qx
LCByZWdUMCwgb3AyLCByZWdUMywgcmVnVDIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgcmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIHJlZ1QzLCByZWdUMik7CiAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBy
ZWdUMCwgcmVnVDIpLCB0YXJnZXQpOwogICAgIH0KIH0KQEAgLTU1MywxMyArNTU5LDE0IEBAIHZv
aWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFJlbGF0aW9uYWxDb25kaXRpCiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2Rl
Lm1fcmhzOwogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAg
ZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICAgICAgY29tcGFyZTMyKGNvbW11dGUoY29uZGl0
aW9uKSwgcmVnVDIsIEltbTMyKGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIoKSksIHJl
Z1QwKTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAg
ICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwg
cmVnVDAsIEltbTMyKGdldENvbnN0YW50T3BlcmFuZChvcDIpLmFzSW50MzIoKSksIHJlZ1QwKTsK
ICAgICB9IGVsc2UgewotICAgICAgICBlbWl0TG9hZDIob3AxLCByZWdUMSwgcmVnVDAsIG9wMiwg
cmVnVDMsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1Qx
LCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMywgcmVn
VDIpOwogICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsK
ICAgICB9CiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKQEAgLTU3NSw4ICs1ODIsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmlu
c3RydWN0aW9uLCBEb3VibGVDb25kaXRpbwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAotICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZChvcDIsIHJl
Z1QzLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdU
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJl
Z1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5v
blplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKQEAgLTYwNCw3ICs2MTEsNyBAQCB2b2lk
IEpJVDo6ZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwg
T3BlcmFuZFR5cGVzIHR5cGVzLAogICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJv
dmUsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwogCiAgICAgICAg
IGlmICghb3AySXNJblJlZ2lzdGVycykKLSAgICAgICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMs
IHJlZ1QyKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMywg
cmVnVDIpOwogCiAgICAgICAgIEp1bXAgZG91YmxlT3AyID0gYnJhbmNoMzIoQmVsb3csIHJlZ1Qz
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSk7CiAKQEAgLTY2OCw3ICs2NzUsNyBA
QCB2b2lkIEpJVDo6ZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVj
dGlvbiwgT3BlcmFuZFR5cGVzIHR5cGVzLAogICAgICAgICBBU1NFUlQob3AySXNJblJlZ2lzdGVy
cyk7CiAKICAgICAgICAgaWYgKCFvcDFJc0luUmVnaXN0ZXJzKQotICAgICAgICAgICAgZW1pdExv
YWRQYXlsb2FkKG9wMSwgcmVnVDApOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
clBheWxvYWQob3AxLCByZWdUMCk7CiAKICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVn
VDAsIGZwUmVnVDApOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VEFyaXRobWV0aWMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMzMl82NC5jcHAKaW5kZXggMjI1ZTE0YTFiZTA4YWJkNTUwYWQ2M2M0NWViNTFhMWM0NjJl
MWMyMC4uMmRkYmNiMzA2OGJlZDliNzU4NzQ1ODEzZGM1NTQzZWVlOThkNWEzYyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcApAQCAtNDcs
NyArNDcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwog
ICAgIAotICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICAKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdEludDMyKHJlZ1QxKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4s
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoMCkpKTsKQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbmM+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCi0gICAgZW1pdExvYWQoc3Jj
RHN0LCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBy
ZWdUMSwgcmVnVDApOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RJbnQzMihyZWdUMSkp
OwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSks
IHJlZ1QwKSk7CkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3Qg
PSBieXRlY29kZS5tX3NyY0RzdDsKIAotICAgIGVtaXRMb2FkKHNyY0RzdCwgcmVnVDEsIHJlZ1Qw
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDEsIHJlZ1QwKTsKIAog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIocmVnVDEpKTsKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKaW5kZXggMDkxOTkxNTg0NjhjMGZlMTAyYjVkZmJm
YTJiZTRmZTE3MzE5N2UyYi4uOWY0NDE1ZTI5YWRjMmIwOWM3ZWE5OGFjNmYzOGY1YzE5MDA0OTFj
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCkBAIC00MywxOCArNDMsMTIg
QEAKIG5hbWVzcGFjZSBKU0MgewogCiBuYW1lc3BhY2UgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHJldHVyblZhbHVlSlNSIHsgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIgfTsKLSAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgY2FsbGVlSlNSIHsgR1BSSW5m
bzo6cmVnVDAgfTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgY29uc3RleHByIEpTVmFs
dWVSZWdzIHJldHVyblZhbHVlSlNSIHsgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiB9OwotICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBjYWxsZWVKU1Ig
eyBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDAgfTsKLSNlbmRpZgorICAgIGNvbnN0ZXhw
ciBKU1ZhbHVlUmVncyBjYWxsZWVKU1IgPSBKU1JJbmZvOjpqc1JlZ1QxMDsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgc3RhdGljX2Fzc2VydCghcmV0dXJuVmFsdWVKU1IudXNlcyhjYWxsRnJhbWVSZWdpc3Rl
cikpOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKHJldHVyblZhbHVlSlNSLCBjYWxsRnJh
bWVSZWdpc3RlcikpOwogCiAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gcmV0dXJuVmFsdWVH
UFIgKHJldHVyblZhbHVlR1BSMi9yZXR1cm5WYWx1ZUdQUiBvbiAzMi1iaXQpLgogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwpAQCAtMTY3LDcgKzE2
MSw3IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25z
dGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mCiAgICAgbm90QmlnZ2VzdC5saW5rKHRoaXMp
OwogICAgIAogICAgIC8vIEluaXRpYWxpemUgJ3RoaXMnLgotICAgIGNvbnN0ZXhwciBKU1ZhbHVl
UmVncyB0aGlzSlNSID0gY2FsbGVlSlNSOyAvLyBVc2VkIGFzIHRlbXBvcmFyeSByZWdpc3Rlcgor
ICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyB0aGlzSlNSID0ganNSZWdUMTA7CiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih0aGlzVmFsdWUsIHRoaXNKU1IpOwogICAgIHN0b3JlVmFsdWUodGhp
c0pTUiwgQWRkcmVzcyhyZWdUNSwgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0
YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKIApAQCAtNDc3LDcgKzQ3MSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uKQogICAgIHVzaW5nIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0SlNSOwog
ICAgIHVzaW5nIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm9HUFI7CiAKLSAgICBz
dGF0aWNfYXNzZXJ0KCFyZXR1cm5WYWx1ZUpTUi51c2VzKHN0dWJJbmZvR1BSKSk7CisgICAgc3Rh
dGljX2Fzc2VydChub092ZXJsYXAocmV0dXJuVmFsdWVKU1IsIHN0dWJJbmZvR1BSKSk7CiAgICAg
c3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUpTUiA9PSBiYXNlSlNSKTsgLy8gT3RoZXJ3aXNlIHdp
bGwgbmVlZCBtb3ZlKHJldHVyblZhbHVlSlNSLCBiYXNlSlNSKQogICAgIHN0YXRpY19hc3NlcnQo
YmFzZUpTUiA9PSByZXN1bHRKU1IpOwogCkBAIC01ODIsNyArNTc2LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiAgICAg
YWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKIAogICAgIC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUs
IHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1QwICAocmVnVDEvcmVnVDAgb3IgMzItYml0KQotICAg
IHN0YXRpY19hc3NlcnQoIXJldHVyblZhbHVlSlNSLnVzZXMoc3R1YkluZm9HUFIpKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChyZXN1bHRKU1IsIHN0dWJJbmZvR1BSKSk7CiAKICAgICBj
b25zdGV4cHIgSlNWYWx1ZVJlZ3MgaXRlckNhbGxSZXN1bHRKU1IgPSBkb250Q2xvYmJlckpTUjsK
ICAgICBtb3ZlVmFsdWVSZWdzKHJldHVyblZhbHVlSlNSLCBpdGVyQ2FsbFJlc3VsdEpTUik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCmluZGV4IGQ2MDJmYzkyNmM5MzI5ZTIx
MmE0ZDUwN2ZkODZkMDc4YWJhN2JhMWEuLmUyYWQyYzBkZTZmMGUwMGVlYzU5MzM3YmI4YzA4NGYz
ODJlMjFjZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCkBAIC02NSwx
MiArNjUsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc0tub3duQ2VsbChWaXJ0dWFsUmVn
aXN0ZXIgc3JjKQogQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5k
KFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgQVNTRVJUKHNyYy5pc0NvbnN0YW50KCkpOwot
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgcmV0dXJuIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdl
dENvbnN0YW50KHNyYyk7Ci0jZWxzZQogICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRDb2Rl
QmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgIT0gU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KTsKICAgICByZXR1cm4gbV91bmxpbmtl
ZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSNlbmRpZgogfQogCiBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBW
aXJ0dWFsUmVnaXN0ZXIgZW50cnkpCkBAIC0zOTUsNiArMzkxLDYyIEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKICAgICBzdG9y
ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwogfQogCitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rl
ciBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKK3sKKyAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsg
Ly8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRo
IGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KKyAgICBpZiAoc3Jj
LmlzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAobV9wcm9maWxlZENvZGVCbG9jay0+aXNDb25z
dGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhzcmMpKQorICAgICAgICAgICAgbW92ZVZhbHVl
KG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyksIGRzdCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIGRzdCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3Ioc3JjKSwgZHN0KTsKK30K
KworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgdGFnLCBSZWdp
c3RlcklEIHBheWxvYWQpCit7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIEpTVmFs
dWVSZWdzIHsgdGFnLCBwYXlsb2FkIH0pOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3Rl
cklEIGRzdCkKK3sKKyAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qg
c2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNv
IHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KKyAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkg
eworICAgICAgICBpZiAobV9wcm9maWxlZENvZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxp
bmtlZENvZGVCbG9jayhzcmMpKQorICAgICAgICAgICAgbW92ZShJbW0zMihtX3VubGlua2VkQ29k
ZUJsb2NrLT5nZXRDb25zdGFudChzcmMpLnBheWxvYWQoKSksIGRzdCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudFBheWxvYWQoc3JjLCBkc3QpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGxvYWQzMihwYXlsb2FkRm9yKHNyYyksIGRzdCk7Cit9
CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcoVmly
dHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpCit7CisgICAgQVNTRVJUKG1fYnl0ZWNv
ZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90
L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCisg
ICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgaWYgKG1fcHJvZmlsZWRDb2RlQmxv
Y2stPmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxvY2soc3JjKSkKKyAgICAgICAgICAg
IG1vdmUoSW1tMzIobV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKS50YWcoKSks
IGRzdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudFRh
ZyhzcmMsIGRzdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbG9hZDMyKHRhZ0Zvcihz
cmMpLCBkc3QpOworfQorI2VsaWYgVVNFKEpTVkFMVUU2NCkKK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJ
RCBkc3QpCit7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIEpTVmFsdWVSZWdzIHsg
ZHN0IH0pOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lz
dGVyUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKK3sKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgSlNWYWx1ZVJlZ3MgeyBkc3QgfSk7Cit9CisjZW5k
aWYKKwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRE
b3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQpAQCAtNDA2LDY5
ICs0NTgsMTEgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0
ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiAgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0Zv
cihyZWcpLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRUYWcoVmlydHVh
bFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcpCi17Ci0gICAgaWYgKHJlZy5pc0NvbnN0YW50
KCkpIHsKLSAgICAgICAgbW92ZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQocmVnKS50YWcoKSks
IHRhZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBsb2FkMzIodGFnRm9yKHJlZyks
IHRhZyk7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRQYXlsb2FkKFZpcnR1YWxSZWdp
c3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCkKLXsKLSAgICBpZiAocmVnLmlzQ29uc3RhbnQo
KSkgewotICAgICAgICBtb3ZlKEltbTMyKGdldENvbnN0YW50T3BlcmFuZChyZWcpLnBheWxvYWQo
KSksIHBheWxvYWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbG9hZDMyKHBheWxv
YWRGb3IocmVnKSwgcGF5bG9hZCk7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQoY29u
c3QgSlNWYWx1ZSYgdiwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCkKLXsKLSAg
ICBtb3ZlKEltbTMyKHYucGF5bG9hZCgpKSwgcGF5bG9hZCk7Ci0gICAgbW92ZShJbW0zMih2LnRh
ZygpKSwgdGFnKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBkc3QpCi17Ci0gICAgZW1p
dExvYWQoc3JjLCBkc3QudGFnR1BSKCksIGRzdC5wYXlsb2FkR1BSKCkpOwotfQotCiBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBk
c3QsIEpTVmFsdWVSZWdzIGZyb20pCiB7CiAgICAgZW1pdFN0b3JlKGRzdCwgZnJvbS50YWdHUFIo
KSwgZnJvbS5wYXlsb2FkR1BSKCkpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKFZp
cnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJl
Z2lzdGVySUQgYmFzZSkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVCh0YWcgIT0gcGF5bG9hZCk7Ci0K
LSAgICBpZiAoYmFzZSA9PSBjYWxsRnJhbWVSZWdpc3RlcikgewotICAgICAgICBSRUxFQVNFX0FT
U0VSVChwYXlsb2FkICE9IGJhc2UpOwotICAgICAgICBlbWl0TG9hZFBheWxvYWQocmVnLCBwYXls
b2FkKTsKLSAgICAgICAgZW1pdExvYWRUYWcocmVnLCB0YWcpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKHBheWxvYWQgPT0gYmFzZSkgeyAvLyBhdm9pZCBzdG9tcGluZyBiYXNl
Ci0gICAgICAgIGxvYWQzMih0YWdGb3IocmVnLCBiYXNlKSwgdGFnKTsKLSAgICAgICAgbG9hZDMy
KHBheWxvYWRGb3IocmVnLCBiYXNlKSwgcGF5bG9hZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBsb2FkMzIocGF5bG9hZEZvcihyZWcsIGJhc2UpLCBwYXlsb2FkKTsKLSAgICBsb2Fk
MzIodGFnRm9yKHJlZywgYmFzZSksIHRhZyk7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1pdExv
YWQyKFZpcnR1YWxSZWdpc3RlciByZWcxLCBSZWdpc3RlcklEIHRhZzEsIFJlZ2lzdGVySUQgcGF5
bG9hZDEsIFZpcnR1YWxSZWdpc3RlciByZWcyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQg
cGF5bG9hZDIpCi17Ci0gICAgZW1pdExvYWQocmVnMiwgdGFnMiwgcGF5bG9hZDIpOwotICAgIGVt
aXRMb2FkKHJlZzEsIHRhZzEsIHBheWxvYWQxKTsKLX0KLQogaW5saW5lIHZvaWQgSklUOjplbWl0
U3RvcmUoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5
bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQogewogICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZv
cihyZWcsIGJhc2UpKTsKQEAgLTU1MywzNCArNTQ3LDYgQEAgQUxXQVlTX0lOTElORSBib29sIEpJ
VDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3QKIAogI2Vsc2UgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAotLy8gZ2V0IGFyZyBwdXRzIGFuIGFy
ZyBmcm9tIHRoZSBTRiByZWdpc3RlciBhcnJheSBpbnRvIGEgaC93IHJlZ2lzdGVyCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBz
cmMsIFJlZ2lzdGVySUQgZHN0KQotewotICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBU
aGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2Vu
ZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgotCi0gICAgaWYgKHNyYy5p
c0NvbnN0YW50KCkpIHsKLSAgICAgICAgaWYgKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3Rh
bnRPd25lZEJ5VW5saW5rZWRDb2RlQmxvY2soc3JjKSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0gICAgICAgICAg
ICBtb3ZlKEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIGRzdCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBsb2FkNjQoYWRkcmVzc0ZvcihzcmMpLCBkc3QpOwotfQot
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxS
ZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYywgZHN0LnBheWxvYWRHUFIoKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklE
IGRzdDEsIFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpCi17Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBkc3QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYzIsIGRzdDIpOwotfQotCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKIHsKICAg
ICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7CkBAIC03MjUsMTQgKzY5MSwzNCBAQCBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyByZXN1bHQpCiAg
ICAgbG9hZENvbnN0YW50KG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQsIHJlc3VsdCk7CiB9CiAKLUFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0
ZXIgY29uc3RhbnQsIEdQUlJlZyByZXN1bHQpCitBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIGxv
YWRBZGRyT2ZDb2RlQmxvY2tDb25zdGFudEJ1ZmZlcihKSVQgJmppdCwgR1BSUmVnIGRzdCkKK3sK
KyAgICBqaXQubG9hZFB0cihqaXQuYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCBkc3QpOworICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhkc3QsIENvZGVCbG9jazo6b2Zm
c2V0T2ZDb25zdGFudHNWZWN0b3JCdWZmZXIoKSksIGRzdCk7Cit9CisKK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQs
IEpTVmFsdWVSZWdzIGRzdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0
YW50KCkpOwotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCByZXN1bHQpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIENvZGVCbG9jazo6b2Zmc2V0
T2ZDb25zdGFudHNWZWN0b3JCdWZmZXIoKSksIHJlc3VsdCk7Ci0gICAgbG9hZFB0cihBZGRyZXNz
KHJlc3VsdCwgY29uc3RhbnQudG9Db25zdGFudEluZGV4KCkgKiBzaXplb2Yodm9pZCopKSwgcmVz
dWx0KTsKKyAgICBsb2FkQWRkck9mQ29kZUJsb2NrQ29uc3RhbnRCdWZmZXIoKnRoaXMsIGRzdC5w
YXlsb2FkR1BSKCkpOworICAgIGxvYWRWYWx1ZShBZGRyZXNzKGRzdC5wYXlsb2FkR1BSKCksIGNv
bnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGRzdCk7CiB9CiAK
KyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvZGVC
bG9ja0NvbnN0YW50UGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQsIFJlZ2lzdGVySUQg
ZHN0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50LmlzQ29uc3RhbnQoKSk7CisgICAg
bG9hZEFkZHJPZkNvZGVCbG9ja0NvbnN0YW50QnVmZmVyKCp0aGlzLCBkc3QpOworICAgIGxvYWQz
MihBZGRyZXNzKGRzdCwgY29uc3RhbnQudG9Db25zdGFudEluZGV4KCkgKiBzaXplb2YoUmVnaXN0
ZXIpICsgUGF5bG9hZE9mZnNldCksIGRzdCk7Cit9CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjps
b2FkQ29kZUJsb2NrQ29uc3RhbnRUYWcoVmlydHVhbFJlZ2lzdGVyIGNvbnN0YW50LCBSZWdpc3Rl
cklEIGRzdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0YW50KCkpOwor
ICAgIGxvYWRBZGRyT2ZDb2RlQmxvY2tDb25zdGFudEJ1ZmZlcigqdGhpcywgZHN0KTsKKyAgICBs
b2FkMzIoQWRkcmVzcyhkc3QsIGNvbnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICogc2l6ZW9mKFJl
Z2lzdGVyKSArIFRhZ09mZnNldCksIGRzdCk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAKaW5kZXggZjg0NDU4NzgwM2MyNjE4YzY4MDM5ODM2Y2VlNmM3YjM0ZmQyYzMw
NC4uNTgwZjI3ZTJmMjUzMTdmZGVjMWEwMzIwYjNhMmUwYmMzNWFhODE2MCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC00NSw4ICs0NSw2IEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLQogdm9pZCBKSVQ6OmVtaXRfb3BfbW92
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCk7CkBAIC01NSwyNiArNTMsMjMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBpZiAobV9wcm9m
aWxlZENvZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhzcmMpKSB7
Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29u
c3RhbnQoc3JjKTsKLSAgICAgICAgICAgIHN0b3JlNjQoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZh
bHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgICAgICBzdG9yZVZhbHVlKG1fdW5saW5r
ZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyksIGFkZHJlc3NGb3IoZHN0KSk7CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCByZWdUMCk7
Ci0gICAgICAgICAgICBzdG9yZTY0KHJlZ1QwLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICAg
ICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywganNSZWdUMTApOworICAgICAgICAgICAgc3Rv
cmVWYWx1ZShqc1JlZ1QxMCwgYWRkcmVzc0Zvcihkc3QpKTsKICAgICAgICAgfQotCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBsb2FkNjQoYWRkcmVzc0ZvcihzcmMpLCByZWdUMCk7Ci0g
ICAgc3RvcmU2NChyZWdUMCwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICBsb2FkVmFsdWUoYWRkcmVz
c0ZvcihzcmMpLCBqc1JlZ1QxMCk7CisgICAgc3RvcmVWYWx1ZShqc1JlZ1QxMCwgYWRkcmVzc0Zv
cihkc3QpKTsKIH0KIAotCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEVuZD4oKTsKLSAgICBSRUxFQVNFX0FTU0VSVChyZXR1cm5WYWx1ZUdQUiAh
PSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgc3RhdGljX2Fzc2VydCghcmV0dXJuVmFs
dWVKU1IudXNlcyhjYWxsRnJhbWVSZWdpc3RlcikpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVKU1IpOwogICAgIGVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIHJldCgpOwpAQCAt
ODcsNiArODIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKIH0KIAorCiB2
b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCk7CkBAIC0xMDUsNyArMTAxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3
X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGxvYWQ4
KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkp
LCBzY3JhdGNoUmVnKTsKICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVn
LCBzY3JhdGNoUmVnKTsKICAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIGJveENlbGwocmVzdWx0UmVnLCBqc1Jl
Z1QxMCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwganNSZWdU
MTApOwogCiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIH0KQEAgLTExOSw5ICsxMTYsMTIg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlUmVnKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRz
dCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGJveENlbGwocmV0dXJuVmFsdWVHUFIsIHJldHVyblZh
bHVlSlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVKU1Ip
OwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKwogdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVz
X2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFz
SW5zdGFuY2U+KCk7CkBAIC0yMTAsMTIgKzIxMCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
bnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiop
Ci17Ci0gICAgLy8gVGhpcyBhbHdheXMgZ29lcyB0byBzbG93IHBhdGggc2luY2Ugd2UgZXhwZWN0
IGl0IHRvIGJlIHJhcmUuCi0gICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLX0KLSAgICAKIHZvaWQg
SklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Vt
cHR5PigpOwpAQCAtMjI5LDMzICsyMjMsMzkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHko
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CiB9CiAKKyNlbmRpZgorCiB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2Zf
aXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVm
aW5lZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJy
YW5jaElmQ2VsbChyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwganNS
ZWdUMTApOworICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKGpzUmVnVDEwKTsKIAotICAg
IGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVm
aW5lZCksIHJlZ1QwKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGNvbXBhcmU2NChFcXVhbCwg
anNSZWdUMTAucGF5bG9hZEdQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmlu
ZWQpLCByZWdUMCk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGNvbXBhcmUzMihFcXVh
bCwganNSZWdUMTAudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcp
LCByZWdUMCk7CisjZW5kaWYKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgCiAgICAgaXND
ZWxsLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFu
Y2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgSnVtcCBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGpz
UmVnVDEwLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KDApLCByZWdUMCk7CiAgICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgp
OwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExv
YWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwganNSZWdUMTAucGF5bG9hZEdQUigpLCByZWdUMSwgcmVnVDIpOwogICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKICAgICBjb21wYXJlUHRyKEVxdWFs
LCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKIAogICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgYm94Qm9vbGVhbihyZWdUMCwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5l
ZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNjQs
MTUgKzI2NCwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwganNSZWdUMTApOwogCi0gICAgYW5k
NjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29t
cGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJl
Z1QwKTsKKyAgICBlbWl0VHVyblVuZGVmaW5lZEludG9OdWxsKGpzUmVnVDEwKTsKKyAgICBpc051
bGwoanNSZWdUMTAsIHJlZ1QwKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGJveEJv
b2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
anNSZWdUMTApOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKwogdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwpA
QCAtNDE4LDE1ICs0MjAsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAorI2VuZGlmCisKIHZvaWQgSklUOjplbWl0X29wX3NldF9m
dW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5h
bWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCBh
cmd1bWVudEdQUjEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1l
LCBhcmd1bWVudEdQUjIpOwotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisKKyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0g
ZGVjbHR5cGUob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lKTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+
KCk7CisgICAgY29uc3RleHByIEdQUlJlZyBmdW5jdGlvbkdQUiA9IHByZWZlcnJlZEFyZ3VtZW50
R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIG5hbWVK
U1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAyPigpOworCisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUubV9mdW5jdGlvbiwgZnVuY3Rpb25H
UFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBuYW1lSlNS
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGdsb2JhbE9iamVjdEdQUiwgZnVuY3Rpb25H
UFIsIG5hbWVKU1IpOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKwogdm9pZCBKSVQ6OmVtaXRf
b3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7CkBAIC00NDIsMjEg
KzQ1NCwyNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
KTsKIH0KIAorI2VuZGlmCisKIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNlPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAg
IGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJl
Z3MgdmFsdWUgPSBqc1JlZ1QxMDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9jb25kaXRpb24sIHZhbHVlKTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0g
ICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaDIgPSByZWdUMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQ
UiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7CisgICAgY29uc3RleHByIEdQUlJlZyBn
bG9iYWxPYmplY3RHUFIgPSByZWdUNDsKKyAgICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcCh2YWx1
ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBnbG9iYWxPYmplY3RHUFIpKTsKICAgICBjb25zdGV4cHIg
Ym9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogICAgIGxvYWRH
bG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5
KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQ
UiksIHRhcmdldCk7CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCB2YWx1ZSwgc2Ny
YXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXRO
YWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTQ3Myw2ICs0ODgsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6dmFsdWVJc0ZhbHNleUdlbmVyYXRvcihWTSYgdm0pCiAg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdU
MDsKKyAgICBzdGF0aWNfYXNzZXJ0KHZhbHVlID09IGpzUmVnVDEwLnBheWxvYWRHUFIoKSk7CiAg
ICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaDIgPSByZWdUMjsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwpAQCAtNTAzLDQ4ICs1MTksNTEgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAg
IEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCBqc1JlZ1QxMCk7CisgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJy
YW5jaElmTm90Q2VsbChqc1JlZ1QxMCk7CiAKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBj
YXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUu
Ci0gICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJv
LCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGpzUmVnVDEwLnBheWxvYWRHUFIoKSwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCkpOworICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGpzUmVnVDEwLnBheWxv
YWRHUFIoKSwgcmVnVDIsIHJlZ1QxKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAg
ICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9i
YWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIG1hc3F1ZXJhZGVz
R2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwogCiAgICAgLy8gTm93IGhhbmRsZSB0aGUg
aW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAogICAgIGlzSW1tZWRpYXRlLmxpbmso
dGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgZW1p
dFR1cm5VbmRlZmluZWRJbnRvTnVsbChqc1JlZ1QxMCk7CisgICAgYWRkSnVtcChicmFuY2hJZk51
bGwoanNSZWdUMTApLCB0YXJnZXQpOwogCiAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7CiAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0
aGlzKTsKLX07Cit9CisKIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51bGw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywganNSZWdU
MTApOworICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoanNSZWdUMTApOwog
CiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgo
WmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwotICAgIGVtaXRMb2Fk
U3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgIGFkZEp1bXAoYnJhbmNo
VGVzdDgoWmVybywgQWRkcmVzcyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6dHlwZUlu
Zm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwg
dGFyZ2V0KTsKKyAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBqc1JlZ1QxMC5wYXlsb2FkR1BS
KCksIHJlZ1QyLCByZWdUMSk7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRk
SnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFs
T2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlh
dGUgPSBqdW1wKCk7CiAKICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1
bmRlZmluZWQgJiBudWxsCiAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmQ2NChU
cnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1w
KGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICBlbWl0VHVyblVuZGVmaW5lZElu
dG9OdWxsKGpzUmVnVDEwKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmTm90TnVsbChqc1JlZ1QxMCks
IHRhcmdldCk7CiAKICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKIH0KIAorI2lmIFVT
RShKU1ZBTFVFNjQpCisKIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnVuZGVmaW5lZE9yTnVsbD4oKTsKQEAgLTU3Niw3
ICs1OTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoYnl0
ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDEpOworICAgIGxvYWRDb2RlQmxvY2tDb25zdGFu
dChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCBKU1ZhbHVlUmVncyB7IHJlZ1QxIH0pOwogICAg
IGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwogfQogCkBA
IC01ODcsNyArNjA2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBsb2FkQ29kZUJsb2Nr
Q29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDEpOworICAgIGxvYWRDb2Rl
QmxvY2tDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCBKU1ZhbHVlUmVncyB7IHJl
Z1QxIH0pOwogICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwg
cmVnVDAsIHJlZ1QxKTsKICAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMigxKSwgYnl0
ZWNvZGUsIE9wSm5lcVB0cjo6TWV0YWRhdGE6Om9mZnNldE9mSGFzSnVtcGVkKCkpOwogICAgIGFk
ZEp1bXAoanVtcCgpLCB0YXJnZXQpOwpAQCAtNTk3LDcgKzYxNiw4IEBAIHZvaWQgSklUOjplbWl0
X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lk
IEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29k
ZS5tX3JocywgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9s
aHMsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcmhzLCBy
ZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIp
OwogICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CiAgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKQEAgLTYwOCwyNiArNjI4LDMwIEBA
IHZvaWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVx
PigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhi
eXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2xocywgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgYWRkSnVtcChicmFuY2gzMihFcXVh
bCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKIH0KIAorI2VuZGlmCisKIHZvaWQgSklUOjplbWl0
X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7Cisg
ICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHZhbHVlID0ganNSZWdUMTA7CiAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdU
MTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2gxID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7CisgICAgc3RhdGlj
X2Fzc2VydChub092ZXJsYXAodmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZ2xvYmFsT2JqZWN0
R1BSKSk7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gdHJ1ZTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7Ci0gICAg
YWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gx
LCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOworICAgIGFkZEp1bXAoYnJhbmNoSWZU
cnV0aHkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJn
ZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJ
c1RydXRoeUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1w
KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC02NDQsNiArNjY4LDcg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnZhbHVlSXNUcnV0
aHlHZW5lcmF0b3IoVk0mIHZtKQogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4
cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgc3RhdGljX2Fzc2VydCh2YWx1ZSA9PSBqc1Jl
Z1QxMC5wYXlsb2FkR1BSKCkpOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdU
MTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CiAgICAgY29uc3RleHBy
IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKQEAgLTY2OCwx
MCArNjkzLDEzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjp2
YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJiB2bSkKIH0KICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisKIHZvaWQgSklUOjplbWl0X29wX25l
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1Qx
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBjb21wYXJl
MzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CkBAIC02ODMsMjEgKzcxMSwyNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5t
X2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2xocywgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
cmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIHJlZ1QxKSwgdGFyZ2V0KTsKIH0KIAorI2VuZGlmCisKIHZvaWQgSklUOjplbWl0X29wX3Ro
cm93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUaHJvdz4oKTsKLSAgICBBU1NFUlQo
cmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOworICAgIHN0YXRpY19hc3NlcnQocmVnVDAgPT0gcmV0
dXJuVmFsdWVHUFIpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvcHlD
YWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFt
ZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7
Ci0gICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIHJlZ1QxLCByZWdUMCk7CisgICAgdXNpbmcgU2xvd09w
ZXJhdGlvbiA9IGRlY2x0eXBlKG9wZXJhdGlvblRocm93KTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+
KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHZhbHVlSlNSID0gcHJlZmVycmVkQXJndW1l
bnRKU1I8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fdmFsdWUsIHZhbHVlSlNSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9i
amVjdEdQUik7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhy
b3csIGdsb2JhbE9iamVjdEdQUiwgdmFsdWVKU1IpOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRs
ZXIodm0oKSk7CiAjZWxzZQogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIg
PSBhcmd1bWVudEdQUjI7CkBAIC03NDAsNiArNzc0LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQog
fQogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCisjaWYgVVNFKEpTVkFMVUU2
NCkKKwogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKQEAgLTc0OCw3ICs3ODQs
OCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhz
OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjMiwgcmVnVDEpOwogCiAjaWYgVVNFKEJJR0lOVDMyKQogICAgIC8qIEF0IGEgaGlnaCBs
ZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKQEAgLTgzMyw3ICs4
NzAsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29k
ZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYzIsIHJlZ1QxKTsKIAogI2lmIFVTRShCSUdJTlQzMikKICAgICAvKiBBdCBh
IGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CkBAIC0x
MDQ4LDYgKzEwODYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFN0b3JlQ2VsbChieXRl
Y29kZS5tX2RzdCwgcmVnVDApOwogfQogCisjZW5kaWYKKwogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dp
dGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoSW1tPigpOwpAQCAt
MTA2MSwxNiArMTEwMSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dp
dGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dp
dGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1
bmxpbmtlZFRhYmxlKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBy
ZWdUMCk7Ci0gICAgYXV0byBub3RJbnQzMiA9IGJyYW5jaElmTm90SW50MzIocmVnVDApOwotICAg
IHN1YjMyKEltbTMyKHVubGlua2VkVGFibGUubV9taW4pLCByZWdUMCk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGpzUmVnVDEwKTsKKyAgICBhdXRvIG5vdEludDMyID0g
YnJhbmNoSWZOb3RJbnQzMihqc1JlZ1QxMCk7CisgICAgc3ViMzIoSW1tMzIodW5saW5rZWRUYWJs
ZS5tX21pbiksIGpzUmVnVDEwLnBheWxvYWRHUFIoKSk7CiAKLSAgICBhZGRKdW1wKGJyYW5jaDMy
KEFib3ZlT3JFcXVhbCwgcmVnVDAsIEltbTMyKGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXpl
KCkpKSwgZGVmYXVsdE9mZnNldCk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGxpbmtlZFRhYmxl
Lm1fY3RpT2Zmc2V0cy5kYXRhKCkpLCByZWdUMSk7Ci0gICAgZmFySnVtcChCYXNlSW5kZXgocmVn
VDEsIHJlZ1QwLCBTY2FsZVB0ciksIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBhZGRKdW1wKGJyYW5j
aDMyKEFib3ZlT3JFcXVhbCwganNSZWdUMTAucGF5bG9hZEdQUigpLCBJbW0zMihsaW5rZWRUYWJs
ZS5tX2N0aU9mZnNldHMuc2l6ZSgpKSksIGRlZmF1bHRPZmZzZXQpOworICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihsaW5rZWRUYWJsZS5tX2N0aU9mZnNldHMuZGF0YSgpKSwgcmVnVDIpOworICAgIGxv
YWRQdHIoQmFzZUluZGV4KHJlZ1QyLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIFNjYWxlUHRyKSwg
cmVnVDIpOworICAgIGZhckp1bXAocmVnVDIsIEpTU3dpdGNoUHRyVGFnKTsKIAogICAgIG5vdElu
dDMyLmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCAmdm0oKSwgcmVnVDAsIHRhYmxlSW5kZXgs
IHVubGlua2VkVGFibGUubV9taW4pOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgJnZtKCksIGpzUmVnVDEwLCB0
YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVl
R1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKQEAgLTEwODksOSArMTEzMCwxMyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5
dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAg
ICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1lbnRHUFIxKTsKLSAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0
Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgdGFi
bGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7CisgICAgdXNpbmcgU2xvd09wZXJhdGlvbiA9
IGRlY2x0eXBlKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUpOworICAgIGNv
bnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xv
d09wZXJhdGlvbiwgMD4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3Mgc2NydXRpbmVlSlNS
ID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMT4oKTsKKworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBzY3J1dGluZWVKU1IpOworICAgIGxvYWRHbG9i
YWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3
aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIGdsb2JhbE9iamVjdEdQUiwgc2NydXRpbmVlSlNS
LCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJKdW1wKHJldHVyblZh
bHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKQEAgLTExMDgsOSArMTE1MywxMyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgs
IG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsK
ICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOwotICAgIGxvYWRH
bG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3
aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEs
IHRhYmxlSW5kZXgpOworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRp
b25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
Z2xvYmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4o
KTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3Mgc2NydXRpbmVlSlNSID0gcHJlZmVycmVkQXJn
dW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMT4oKTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NydXRpbmVlLCBzY3J1dGluZWVKU1IpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFs
T2JqZWN0R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhV
bmtub3duS2V5VHlwZSwgZ2xvYmFsT2JqZWN0R1BSLCBzY3J1dGluZWVKU1IsIHRhYmxlSW5kZXgp
OwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0KIApAQCAt
MTEyMCwxNSArMTE2OSwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVt
cCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMxLCBqc1JlZ1QxMCk7CisgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5j
aElmTm90Q2VsbChqc1JlZ1QxMCk7CiAKLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAg
ICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFk
ZHJlc3MoanNSZWdUMTAucGF5bG9hZEdQUigpLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAgICAgbW92ZShUcnVz
dGVkSW1tMzIoMCksIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBqdW1wKCk7CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsK
LSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIHJlZ1QyLCByZWdU
MSk7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBh
cmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwpAQCAtMTEzNiwxNCArMTE4NSwxNCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAKICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwogCi0gICAgYW5kNjQoVHJ1
c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsK
KyAgICBlbWl0VHVyblVuZGVmaW5lZEludG9OdWxsKGpzUmVnVDEwKTsKKyAgICBpc051bGwoanNS
ZWdUMTAsIHJlZ1QwKTsKIAogICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwogICAgIHdh
c05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKIAotICAgIGJveEJvb2xlYW4o
cmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFf
bnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTE1MiwxNSAr
MTIwMSwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1l
ZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjMSwganNSZWdUMTApOworICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENl
bGwoanNSZWdUMTApOwogCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFu
Y2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgSnVtcCBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGpz
UmVnVDEwLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KDEpLCByZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVt
cCgpOwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwganNSZWdUMTAucGF5bG9hZEdQUigpLCByZWdUMiwgcmVnVDEpOwogICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKE5v
dEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKQEAgLTExNjgsMTYgKzEyMTcsMTggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIAogICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CiAKLSAgICBhbmQ2NChUcnVzdGVk
SW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOwor
ICAgIGVtaXRUdXJuVW5kZWZpbmVkSW50b051bGwoanNSZWdUMTApOworICAgIGlzTm90TnVsbChq
c1JlZ1QxMCwgcmVnVDApOwogCiAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CiAgICAg
d2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogCi0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgYm94Qm9vbGVhbihyZWdUMCwganNSZWdUMTApOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCBqc1JlZ1QxMCk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQor
CiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB7CiAgICAgLy8g
RXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0
YW50CkBAIC0xMzA0LDE2ICsxMzU1LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRTdG9yZUNlbGwo
ZHN0LCByZWdUMCk7CiB9CiAKKyNlbmRpZgorCiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIGpzUmVnVDEwKTsKIAotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGpzUmVnVDEwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmlu
YWxPYmplY3RUeXBlKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKGpzUmVnVDEw
LnBheWxvYWRHUFIoKSwgRmluYWxPYmplY3RUeXBlKSk7CiAgICAgbG9hZDMyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcFRvVGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkU3RydWN0dXJlSUQo
KSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJl
Z1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTEzMjgsNyArMTM4MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgUmVnaXN0ZXJJRCBjYWNoZWRGdW5j
dGlvblJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QzOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlclBheWxvYWQoY2FsbGVlLCBjYWxsZWVSZWcpOwogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVlUmVnKSk7CiAgICAgbG9hZFB0cihBZGRyZXNz
KGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwg
cmFyZURhdGFSZWcpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmFyZURh
dGFSZWcsIFRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpKTsKQEAgLTEzNDcs
OSArMTQwMCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFn
ZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIG11dGF0b3JGZW5jZSgqbV92bSk7CiAgICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZHN0KTsKKyAgICBib3hDZWxsKHJlc3VsdFJlZywganNSZWdUMTApOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIGpzUmVnVDEwKTsKIH0KIAorI2lmIFVT
RShKU1ZBTFVFNjQpCisKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tUZHo+KCk7CkBAIC0xNDA1LDYgKzE0NjEsMTQgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXMKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCisjZW5kaWYgLy8gVVNFKEpTVkFM
VUU2NCkKKwordm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1
Y3Rpb24qKQoreworICAgIC8vIFRoaXMgYWx3YXlzIGdvZXMgdG8gc2xvdyBwYXRoIHNpbmNlIHdl
IGV4cGVjdCBpdCB0byBiZSByYXJlLgorICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Cit9CisKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CkBAIC0xNDE1LDE2ICsxNDc5LDIyIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9y
ID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFu
Y2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIEdQUkluZm86OmFyZ3VtZW50
R1BSMyk7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BS
SW5mbzo6YXJndW1lbnRHUFIzKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1Zh
bHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19CisgICAgdXNpbmcgU2xvd09wZXJhdGlvbiA9IGRlY2x0
eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20pOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xv
YmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4oKTsK
KyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgdmFsdWVKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpT
UjxTbG93T3BlcmF0aW9uLCAxPigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgY29uc3RydWN0b3JH
UFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAyPigpOworICAgIGNvbnN0
ZXhwciBKU1ZhbHVlUmVncyBoYXNJbnN0YW5jZVZhbHVlSlNSID0gcHJlZmVycmVkQXJndW1lbnRK
U1I8U2xvd09wZXJhdGlvbiwgMz4oKTsKIAotI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVKU1IpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJQYXlsb2FkKGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvckdQUik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBoYXNJbnN0YW5jZVZhbHVlSlNS
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgY2FsbE9wZXJh
dGlvbigKKyAgICAgICAgb3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwKKyAgICAgICAgZ2xvYmFs
T2JqZWN0R1BSLCB2YWx1ZUpTUiwgY29uc3RydWN0b3JHUFIsIGhhc0luc3RhbmNlVmFsdWVKU1Ip
OworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIHJldHVyblZhbHVlSlNSKTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVKU1IpOworfQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewpAQCAtMTU4OCwxMSArMTY1OCw3IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwotI2Vsc2UKLSAgICBlbWl0
TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKLSNlbmRpZgorICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50
R1BSMSk7CiAgICAgYXV0byBjb25zdGFudCA9IGFkZFRvQ29uc3RhbnRQb29sKEpJVENvbnN0YW50
UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNsLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7CiAgICAgbG9hZENvbnN0YW50
KGNvbnN0YW50LCBhcmd1bWVudEdQUjIpOwogCkBAIC0xNjM0LDEyICsxNzAwLDggQEAgdm9pZCBK
SVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwg
YXJndW1lbnRHUFIxKTsKLSNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2Nv
cGUsIGFyZ3VtZW50R1BSMSk7Ci0jZW5kaWYKIAorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQ
YXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAgICAgYXV0byBjb25zdGFu
dCA9IGFkZFRvQ29uc3RhbnRQb29sKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25FeHBy
LCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9m
dW5jdGlvbkRlY2wpKSk7CiAgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVudEdQUjIp
OwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwpAQCAtMTcwMCwxNCArMTc2
MiwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BS
MSwgYXJndW1lbnRHUFIyKTsKICNlbHNlCiAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFk
YXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5
QWxsb2NhdGlvblByb2ZpbGUoKSwgcmVnVDIpOwotICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVn
VDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDEs
IHJlZ1QwKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIHJlZ1QzLCByZWdUMiwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAjZW5kaWYKIH0KIAotI2lmIFVTRShKU1ZBTFVF
NjQpCi0KIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIG1faXNTaGFyZWFibGUgPSBmYWxzZTsKQEAgLTE3
MTcsNTYgKzE3NzcsNTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRU
eXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlcjsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlVG9Qcm9maWxlLCBqc1JlZ1QxMCk7CiAKICAgICBK
dW1wTGlzdCBqdW1wVG9FbmQ7CiAKLSAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmRW1wdHko
cmVnVDApKTsKKyAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmRW1wdHkoanNSZWdUMTApKTsK
IAogICAgIC8vIENvbXBpbGUgaW4gYSBwcmVkaWN0aXZlIHR5cGUgY2hlY2ssIGlmIHBvc3NpYmxl
LCB0byBzZWUgaWYgd2UgY2FuIHNraXAgd3JpdGluZyB0byB0aGUgbG9nLgogICAgIC8vIFRoZXNl
IHR5cGVjaGVja3MgYXJlIGlubGluZWQgdG8gbWF0Y2ggdGhvc2Ugb2YgdGhlIDY0LWJpdCBKU1Zh
bHVlIHR5cGUgY2hlY2tzLgogICAgIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5U
eXBlID09IFR5cGVVbmRlZmluZWQpCi0gICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZV
bmRlZmluZWQocmVnVDApKTsKKyAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZlVuZGVm
aW5lZChqc1JlZ1QxMCkpOwogICAgIGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0
U2VlblR5cGUgPT0gVHlwZU51bGwpCi0gICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZO
dWxsKHJlZ1QwKSk7CisgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZOdWxsKGpzUmVn
VDEwKSk7CiAgICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9
PSBUeXBlQm9vbGVhbikKLSAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZkJvb2xlYW4o
cmVnVDAsIHJlZ1QxKSk7CisgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZCb29sZWFu
KGpzUmVnVDEwLCByZWdUMikpOwogICAgIGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9s
YXN0U2VlblR5cGUgPT0gVHlwZUFueUludCkKLSAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFu
Y2hJZkludDMyKHJlZ1QwKSk7CisgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZJbnQz
Mihqc1JlZ1QxMCkpOwogICAgIGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2Vl
blR5cGUgPT0gVHlwZU51bWJlcikKLSAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZk51
bWJlcihyZWdUMCkpOworICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmTnVtYmVyKGpz
UmVnVDEwLCByZWdUMikpOwogICAgIGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0
U2VlblR5cGUgPT0gVHlwZVN0cmluZykgewotICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7Ci0gICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZTdHJp
bmcocmVnVDApKTsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoanNS
ZWdUMTApOworICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmU3RyaW5nKGpzUmVnVDEw
LnBheWxvYWRHUFIoKSkpOwogICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKICAgICB9CiAK
ICAgICAvLyBMb2FkIHRoZSB0eXBlIHByb2ZpbGluZyBsb2cgaW50byBUMi4KICAgICBUeXBlUHJv
ZmlsZXJMb2cqIGNhY2hlZFR5cGVQcm9maWxlckxvZyA9IG1fdm0tPnR5cGVQcm9maWxlckxvZygp
OwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlUHJvZmlsZXJMb2cpLCByZWdUMik7
Ci0gICAgLy8gTG9hZCB0aGUgbmV4dCBsb2cgZW50cnkgaW50byBUMS4KLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDIsIFR5cGVQcm9maWxlckxvZzo6Y3VycmVudExvZ0VudHJ5T2Zmc2V0KCkpLCBy
ZWdUMSk7CisgICAgLy8gTG9hZCB0aGUgbmV4dCBsb2cgZW50cnkgaW50byBUMy4KKyAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDIsIFR5cGVQcm9maWxlckxvZzo6Y3VycmVudExvZ0VudHJ5T2Zmc2V0
KCkpLCByZWdUMyk7CiAKICAgICAvLyBTdG9yZSB0aGUgSlNWYWx1ZSBvbnRvIHRoZSBsb2cgZW50
cnkuCi0gICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhyZWdUMSwgVHlwZVByb2ZpbGVyTG9nOjpM
b2dFbnRyeTo6dmFsdWVPZmZzZXQoKSkpOworICAgIHN0b3JlVmFsdWUoanNSZWdUMTAsIEFkZHJl
c3MocmVnVDMsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnZhbHVlT2Zmc2V0KCkpKTsKIAot
ICAgIC8vIFN0b3JlIHRoZSBzdHJ1Y3R1cmVJRCBvZiB0aGUgY2VsbCBpZiBUMCBpcyBhIGNlbGws
IG90aGVyd2lzZSwgc3RvcmUgMCBvbiB0aGUgbG9nIGVudHJ5LgotICAgIEp1bXAgbm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdG9yZTMyKHJlZ1QwLCBBZGRy
ZXNzKHJlZ1QxLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSk7CisgICAgLy8gU3RvcmUgdGhlIHN0cnVjdHVyZUlEIG9mIHRoZSBjZWxsIGlmIGpzUmVnVDEw
IGlzIGEgY2VsbCwgb3RoZXJ3aXNlLCBzdG9yZSAwIG9uIHRoZSBsb2cgZW50cnkuCisgICAgSnVt
cCBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGpzUmVnVDEwKTsKKyAgICBsb2FkMzIoQWRkcmVz
cyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QwKTsKKyAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QzLCBUeXBlUHJvZmlsZXJMb2c6
OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAgICAgSnVtcCBza2lwSXNDZWxsID0g
anVtcCgpOwogICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0z
MigwKSwgQWRkcmVzcyhyZWdUMSwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6c3RydWN0dXJl
SURPZmZzZXQoKSkpOworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKHJlZ1Qz
LCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAgICAg
c2tpcElzQ2VsbC5saW5rKHRoaXMpOwogCiAgICAgLy8gU3RvcmUgdGhlIHR5cGVMb2NhdGlvbiBv
biB0aGUgbG9nIGVudHJ5LgogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlTG9jYXRp
b24pLCByZWdUMCk7Ci0gICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhyZWdUMSwgVHlwZVByb2Zp
bGVyTG9nOjpMb2dFbnRyeTo6bG9jYXRpb25PZmZzZXQoKSkpOworICAgIHN0b3JlUHRyKHJlZ1Qw
LCBBZGRyZXNzKHJlZ1QzLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojpsb2NhdGlvbk9mZnNl
dCgpKSk7CiAKICAgICAvLyBJbmNyZW1lbnQgdGhlIGN1cnJlbnQgbG9nIGVudHJ5LgotICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnkpKSwgcmVn
VDEpOwotICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDIsIFR5cGVQcm9maWxlckxvZzo6
Y3VycmVudExvZ0VudHJ5T2Zmc2V0KCkpKTsKLSAgICBKdW1wIHNraXBDbGVhckxvZyA9IGJyYW5j
aFB0cihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW1QdHIoY2FjaGVkVHlwZVByb2ZpbGVyTG9n
LT5sb2dFbmRQdHIoKSkpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKFR5cGVQcm9m
aWxlckxvZzo6TG9nRW50cnkpKSwgcmVnVDMpOworICAgIHN0b3JlUHRyKHJlZ1QzLCBBZGRyZXNz
KHJlZ1QyLCBUeXBlUHJvZmlsZXJMb2c6OmN1cnJlbnRMb2dFbnRyeU9mZnNldCgpKSk7CisgICAg
SnVtcCBza2lwQ2xlYXJMb2cgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QzLCBUcnVzdGVkSW1t
UHRyKGNhY2hlZFR5cGVQcm9maWxlckxvZy0+bG9nRW5kUHRyKCkpKTsKICAgICAvLyBDbGVhciB0
aGUgbG9nIGlmIHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIGxvZy4KICAgICBjYWxsT3BlcmF0aW9u
Tm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25Qcm9jZXNzVHlwZVByb2ZpbGVyTG9nLCAmdm0oKSk7
CiAgICAgc2tpcENsZWFyTG9nLmxpbmsodGhpcyk7CkBAIC0xNzc4LDEzICsxODM4LDEzIEBAIHZv
aWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dD
aGlja2VuKCkpOwogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwotICAgIHN0YXRpY19hc3NlcnQo
bm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZl
IHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG5vT3Zlcmxh
cChyZWdUMCwgbm9uQXJnR1BSMCwgcmVnVDIpLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRo
aXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcExvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZT4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFja2V0
UmVnID0gcmVnVDA7CiAgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhp
cyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgogICAgIEdQUlJlZyBzY3JhdGNoMlJl
ZyA9IHJlZ1QyOwogICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFj
a2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKICAgICBsb2dTaGFkb3dDaGlja2Vu
UHJvbG9ndWVQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgcmVnVDMpOwogfQog
CkBAIC0xNzkyLDcgKzE4NTIsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNr
ZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKICAgICB1cGRhdGVUb3BDYWxsRnJh
bWUoKTsKLSAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BS
MCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7Cisg
ICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAocmVnVDAsIG5vbkFyZ0dQUjAsIHJlZ1QyKSwgIndl
IHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CisgICAgc3RhdGljX2Fzc2Vy
dChub092ZXJsYXAocmVnVDAsIHJlZ1QxLCBqc1JlZ1QzMiwgcmVnVDQpLCAid2Ugd2lsbCBoYXZl
IHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwogICAgIEdQUlJlZyBz
aGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKICAgICB7CkBAIC0xODAwLDE0ICsxODYxLDEyIEBAIHZv
aWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1Qy
OwogICAgICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJl
Zywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKICAgICB9Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIGpzUmVnVDMyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUNCk7CiAgICAgbG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QxKTsKLSAgICBsb2dTaGFk
b3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwg
cmVnVDMsIHJlZ1QxLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOworICAgIGxvZ1No
YWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywganNSZWdUMzIsIHJlZ1Q0LCBy
ZWdUMSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpKTsKIH0KIAotI2VuZGlmIC8vIFVT
RShKU1ZBTFVFNjQpCi0KIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgbV9pc1NoYXJlYWJs
ZSA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCmluZGV4IGQ0ODQzNGNlZmZhOWU1MjcxNzcyOWMzNTQ0MDc5NTc4YWNmZTE3ODMuLjQyYWMx
MDNmM2VjNjg0ZmI4NmE4ZTIxY2UzOWU3N2ExZmM1YTQwOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTUwLDczICs1MCw2IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi12b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE1vdj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwotICAgIAot
ICAgIGlmIChzcmMuaXNDb25zdGFudCgpKQotICAgICAgICBlbWl0U3RvcmUoZHN0LCBnZXRDb25z
dGFudE9wZXJhbmQoc3JjKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGVtaXRMb2FkKHNyYywgcmVn
VDEsIHJlZ1QwKTsKLSAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLSAgICB9
Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIEFTU0VSVChyZXR1cm5WYWx1ZUdQUiAhPSBjYWxsRnJhbWVSZWdp
c3Rlcik7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbmQ+
KCk7Ci0gICAgZW1pdExvYWQoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDEsIHJldHVyblZhbHVlR1BS
KTsKLSAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgZW1pdEZ1bmN0aW9uRXBpbG9n
dWUoKTsKLSAgICByZXQoKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKbXA+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGFk
ZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKLSAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUu
c3RydWN0dXJlKCk7Ci0gICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6
YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBBbGxvY2F0
b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0ZpbmFs
T2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRv
cklmRXhpc3RzKTsKLQotICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmV0dXJuVmFsdWVHUFI7
Ci0gICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIHNj
cmF0Y2hSZWcgPSByZWdUMzsKLQotICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCkpOwotICAgIGVsc2UgewotICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0g
ICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAgICAgICAg
ZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFs
bG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJm
bHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5l
U3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAg
IGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUu
bV9kc3QsIHJlc3VsdFJlZyk7Ci0gICAgfQotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3
X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09i
amVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRDb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3Bl
cmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRz
dCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFz
X2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0
YW5jZT4oKTsKQEAgLTEyNCwxMyArNTcsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVz
X2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
IFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3Rh
bmNlVmFsdWU7CiAKLSAgICBlbWl0TG9hZFBheWxvYWQoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDAp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGhhc0luc3RhbmNlVmFsdWUsIHJl
Z1QwKTsKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5z
dGFuY2Ugd291bGQgZG8uCiAgICAgSnVtcCBoYXNJbnN0YW5jZVZhbHVlTm90Q2VsbCA9IGVtaXRK
dW1wSWZOb3RKU0NlbGwoaGFzSW5zdGFuY2VWYWx1ZSk7Ci0gICAgSnVtcCBjdXN0b21oYXNJbnN0
YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX3By
b2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNl
U3ltYm9sRnVuY3Rpb24oKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIEp1
bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIEFk
ZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlvblBy
b3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbikpKTsKIAogICAgIC8vIFdlIGtub3cgdGhhdCBj
b25zdHJ1Y3RvciBpcyBhbiBvYmplY3QgZnJvbSB0aGUgd2F5IGJ5dGVjb2RlIGlzIGVtaXR0ZWQg
Zm9yIGluc3RhbmNlb2YgZXhwcmVzc2lvbnMuCi0gICAgZW1pdExvYWRQYXlsb2FkKGNvbnN0cnVj
dG9yLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoY29uc3RydWN0
b3IsIHJlZ1QwKTsKIAogICAgIC8vIENoZWNrIHRoYXQgY29uc3RydWN0b3IgJ0ltcGxlbWVudHNE
ZWZhdWx0SGFzSW5zdGFuY2UnIGkuZS4gdGhlIG9iamVjdCBpcyBub3QgYSBDLUFQSSB1c2VyIG5v
ciBhIGJvdW5kIGZ1bmN0aW9uLgogICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0
SGFzSW5zdGFuY2UpLCByZWdUMCk7CkBAIC0xNTksOCArOTMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
dXNpbmcgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMUdQUjsKICAgICB1c2lu
ZyBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gyR1BSOwogCi0gICAgZW1pdExv
YWRQYXlsb2FkKHZhbHVlLCB2YWx1ZUpTUi5wYXlsb2FkR1BSKCkpOwotICAgIGVtaXRMb2FkUGF5
bG9hZChwcm90bywgcHJvdG9KU1IucGF5bG9hZEdQUigpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyUGF5bG9hZCh2YWx1ZSwgdmFsdWVKU1IucGF5bG9hZEdQUigpKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChwcm90bywgcHJvdG9KU1IucGF5bG9hZEdQUigpKTsKIAog
ICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxs
IC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5j
ZS4KICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWUpOwpAQCAtMTg4LDEyICsx
MjIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlc3VsdEdQUik7CiB9
CiAKLXZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9u
KikKLXsKLSAgICAvLyBUaGlzIGFsd2F5cyBnb2VzIHRvIHNsb3cgcGF0aCBzaW5jZSB3ZSBleHBl
Y3QgaXQgdG8gYmUgcmFyZS4KLSAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotfQotCiB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CkBAIC0yMTQsMTUgKzE0MiwxMiBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8UwogICAgIHVzaW5nIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJvdG9K
U1I7CiAgICAgc3RhdGljX2Fzc2VydCh2YWx1ZUpTUiA9PSBwcmVmZXJyZWRBcmd1bWVudEpTUjxT
bG93T3BlcmF0aW9uLCAyPigpKTsKICAgICAvLyBQcm90byB3aWxsIGJlIHBhc3NlZCBvbiBzdGFj
aywganVzdCBtYWtlIHN1cmUgbm8gb3ZlcmxhcAotICAgIHN0YXRpY19hc3NlcnQoIXByb3RvSlNS
LnVzZXMoZ2xvYmFsT2JqZWN0R1BSKSk7Ci0gICAgc3RhdGljX2Fzc2VydCghcHJvdG9KU1IudXNl
cyhzdHViSW5mb0dQUikpOwotICAgIHN0YXRpY19hc3NlcnQoIXZhbHVlSlNSLnVzZXMoZ2xvYmFs
T2JqZWN0R1BSKSk7Ci0gICAgc3RhdGljX2Fzc2VydCghdmFsdWVKU1IudXNlcyhzdHViSW5mb0dQ
UikpOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKHZhbHVlSlNSLCBwcm90b0pTUiwgZ2xv
YmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUikpOwogCiAgICAgbG9hZEdsb2JhbE9iamVjdChnbG9i
YWxPYmplY3RHUFIpOwogICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29u
c3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwotICAgIGVtaXRMb2FkVGFnKHZhbHVlLCB2YWx1ZUpT
Ui50YWdHUFIoKSk7Ci0gICAgZW1pdExvYWRUYWcocHJvdG8sIHByb3RvSlNSLnRhZ0dQUigpKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZhbHVlLCB2YWx1ZUpTUi50YWdHUFIoKSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyhwcm90bywgcHJvdG9KU1IudGFnR1BSKCkp
OwogICAgIGNhbGxPcGVyYXRpb248U2xvd09wZXJhdGlvbj4oCiAgICAgICAgIEFkZHJlc3Moc3R1
YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksCiAg
ICAgICAgIGRzdCwKQEAgLTIzMCw4MyArMTU1LDI1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9p
bnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwotICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3Rv
ciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3Rh
bmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7Ci0KLSAgICBlbWl0TG9hZCh2
YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZFBheWxvYWQoY29uc3RydWN0b3IsIHJl
Z1QyKTsKLSAgICBlbWl0TG9hZChoYXNJbnN0YW5jZVZhbHVlLCByZWdUNCwgcmVnVDMpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgbV9wcm9maWxlZENvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHJlZ1QyLCBK
U1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpKTsKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOwotfQotICAgIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKICAgICAKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSwgcmVnVDApOwogICAgIGNvbXBh
cmUzMihFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSwg
cmVnVDApOwogCiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKLSAgICAKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBKdW1wIGlz
Q2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMSk7Ci0KLSAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1Qx
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKLSAgICAKLSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBKdW1wIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAg
IEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLSAgICAKLSAgICBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0g
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDEpOwotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7Ci0K
LSAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZG9uZS5saW5r
KHRoaXMpOwotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJc1VuZGVmaW5lZE9yTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwotCi0gICAgZW1pdExvYWRUYWcodmFsdWUsIHJlZ1QwKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChK
U1ZhbHVlOjpVbmRlZmluZWRUYWcgKyAxID09IEpTVmFsdWU6Ok51bGxUYWcpICYmIChKU1ZhbHVl
OjpOdWxsVGFnICYgMHgxKSwgIiIpOwotICAgIG9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7
Ci0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxU
YWcpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKLX0KLQogdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNC
b29sZWFuPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgCi0gICAg
ZW1pdExvYWRUYWcodmFsdWUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFn
KHZhbHVlLCByZWdUMCk7CiAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkJvb2xlYW5UYWcpLCByZWdUMCk7CiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJl
Z1QwKTsKIH0KQEAgLTMxNyw3ICsxODQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwogICAgIAotICAgIGVtaXRMb2FkVGFnKHZhbHVlLCByZWdUMCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyh2YWx1ZSwgcmVnVDApOwogICAgIGFkZDMyKFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDApOwogICAgIGNvbXBhcmUzMihCZWxvdywgcmVnVDAsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcgKyAxKSwgcmVnVDApOwogICAgIGVtaXRTdG9yZUJv
b2woZHN0LCByZWdUMCk7CkBAIC0zMzYsNyArMjAzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNf
Y2VsbF93aXRoX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgaW50IHR5
cGUgPSBieXRlY29kZS5tX3R5cGU7CiAKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1Qw
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSwgcmVnVDApOwogICAg
IEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKIAogICAgIGNvbXBhcmU4
KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7CkBAIC0zNTUsNyArMjIyLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRMb2FkKHZhbHVlLCBy
ZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxLCBy
ZWdUMCk7CiAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwogCiAg
ICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZv
VHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7CkBAIC0zNzQs
NyArMjQxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAot
ICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYywgcmVnVDEsIHJlZ1QwKTsKIAogICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENl
bGwocmVnVDEpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7CkBAIC0z
OTAsNyArMjU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3Ny
YzsKIAotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYywgcmVnVDEsIHJlZ1QwKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChyZWdUMSkpOwogICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsK
QEAgLTQwMSwxMTkgKzI2OCwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXko
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAgICAgZW1pdFN0b3Jl
KGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9u
X25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgZnVuYyA9IGJ5dGVjb2RlLm1fZnVuY3Rpb247Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIG5hbWUgPSBieXRlY29kZS5tX25hbWU7Ci0gICAgZW1pdExvYWRQYXlsb2Fk
KGZ1bmMsIHJlZ1QxKTsKLSAgICBlbWl0TG9hZChuYW1lLCByZWdUMywgcmVnVDIpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBtX3Byb2ZpbGVkQ29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwotfQot
CiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5v
dD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRMb2FkVGFn
KHNyYywgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcoc3JjLCByZWdUMCk7
CiAKLSAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QxLCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RC
b29sZWFuKHJlZ1QxLCBJbnZhbGlkR1BSUmVnKSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDEp
LCByZWdUMCk7CiAKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDAsIChkc3QgPT0gc3JjKSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSmZhbHNlPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBjb25kID0gYnl0ZWNvZGUubV9j
b25kaXRpb247Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotCi0gICAgZW1pdExvYWQoY29uZCwgcmVn
VDEsIHJlZ1QwKTsKLQotICAgIEpTVmFsdWVSZWdzIHZhbHVlKHJlZ1QxLCByZWdUMCk7Ci0gICAg
R1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7Ci0g
ICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGFk
ZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBS
ZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgY29uZCA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOwotICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKLQotICAgIGVtaXRMb2FkKGNvbmQsIHJlZ1QxLCByZWdUMCk7Ci0gICAgYm9v
bCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIEpTVmFsdWVS
ZWdzIHZhbHVlKHJlZ1QxLCByZWdUMCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2
bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcU51bGw+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotCi0gICAgZW1p
dExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwotCi0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMSk7Ci0KLSAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qy
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0g
ICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKLQotICAg
IC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAg
ICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHN0YXRpY19hc3NlcnQoKEpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyArIDEgPT0gSlNWYWx1ZTo6TnVsbFRhZykgJiYgKEpTVmFsdWU6Ok51bGxUYWcg
JiAweDEpLCAiIik7Ci0gICAgb3IzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICBhZGRK
dW1wKGJyYW5jaElmTnVsbChyZWdUMSksIHRhcmdldCk7Ci0KLSAgICBpc05vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9y
ZWlnbi5saW5rKHRoaXMpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxsPigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLQotICAgIGVt
aXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKLQotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDEpOwotCi0gICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwot
ICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgd2FzTm90
SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNh
c2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0KLSAg
ICBzdGF0aWNfYXNzZXJ0KChKU1ZhbHVlOjpVbmRlZmluZWRUYWcgKyAxID09IEpTVmFsdWU6Ok51
bGxUYWcpICYmIChKU1ZhbHVlOjpOdWxsVGFnICYgMHgxKSwgIiIpOwotICAgIG9yMzIoVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUMSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZk5vdE51bGwocmVnVDEpLCB0
YXJnZXQpOwotCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci19Ci0KIHZvaWQgSklU
OjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSnVuZGVmaW5lZE9yTnVsbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRMb2FkVGFnKHZh
bHVlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyh2YWx1ZSwgcmVnVDAp
OwogICAgIHN0YXRpY19hc3NlcnQoKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyArIDEgPT0gSlNWYWx1
ZTo6TnVsbFRhZykgJiYgKEpTVmFsdWU6Ok51bGxUYWcgJiAweDEpLCAiIik7CiAgICAgb3IzMihU
cnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaElmTnVsbChyZWdUMCks
IHRhcmdldCk7CkBAIC01MjUsNyArMzAxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmlu
ZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFi
ZWwpOwogCi0gICAgZW1pdExvYWRUYWcodmFsdWUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyVGFnKHZhbHVlLCByZWdUMCk7CiAgICAgc3RhdGljX2Fzc2VydCgoSlNWYWx1ZTo6
VW5kZWZpbmVkVGFnICsgMSA9PSBKU1ZhbHVlOjpOdWxsVGFnKSAmJiAoSlNWYWx1ZTo6TnVsbFRh
ZyAmIDB4MSksICIiKTsKICAgICBvcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwogICAgIGFk
ZEp1bXAoYnJhbmNoSWZOb3ROdWxsKHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTUzNSwxMyArMzExLDEy
IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEplcVB0cj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1
ZTsKLSAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29uc3RhbnRPcGVyYW5kKGJ5dGVj
b2RlLm1fc3BlY2lhbFBvaW50ZXIpOwotICAgIEFTU0VSVChzcGVjaWFsUG9pbnRlci5pc0NlbGwo
KSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVn
VDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMSwgcmVnVDApOwogICAg
IEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7Ci0gICAgYWRkSnVtcChicmFu
Y2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgp
KSksIHRhcmdldCk7CisgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50UGF5bG9hZChieXRlY29kZS5t
X3NwZWNpYWxQb2ludGVyLCByZWdUMik7CisgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIHJl
Z1QwLCByZWdUMiksIHRhcmdldCk7CiAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwogfQogCkBAIC01
NDksMTMgKzMyNCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0g
Ynl0ZWNvZGUubV92YWx1ZTsKLSAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29uc3Rh
bnRPcGVyYW5kKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpOwotICAgIEFTU0VSVChzcGVjaWFs
UG9pbnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdExvYWQo
c3JjLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdU
MSwgcmVnVDApOwogICAgIEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7Ci0g
ICAgSnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3Bl
Y2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnRQYXlsb2Fk
KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJlZ1QyKTsKKyAgICBKdW1wIGVxdWFsID0gYnJh
bmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIpOwogICAgIG5vdENlbGwubGluayh0aGlzKTsKICAg
ICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMigxKSwgYnl0ZWNvZGUsIE9wSm5lcVB0cjo6
TWV0YWRhdGE6Om9mZnNldE9mSGFzSnVtcGVkKCkpOwogICAgIGFkZEp1bXAoanVtcCgpLCB0YXJn
ZXQpOwpAQCAtNTcwLDcgKzM0NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBi
eXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhz
OwogCi0gICAgZW1pdExvYWQyKHNyYzEsIHJlZ1QxLCByZWdUMCwgc3JjMiwgcmVnVDMsIHJlZ1Qy
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QxLCByZWdUMCk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCByZWdUMywgcmVnVDIpOwogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkNlbGwocmVnVDEpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywgcmVn
VDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CkBAIC01OTUsMTMgKzM3MCwx
NSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRQogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFu
Y2hJZk5vdFN0cmluZyhyZWdUMikpOwogCiAgICAgLy8gU3RyaW5nIGNhc2UuCi0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCByZWdUMSwgcmVn
VDAsIHJlZ1QyKTsKICAgICBzdG9yZVJlc3VsdC5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIEdl
bmVyaWMgY2FzZS4KICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAv
LyBkb3VibGVzCiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVFcSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZUVxLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QyKSk7CiAKICAgICBzdG9yZVJlc3VsdC5saW5rKHRoaXMpOwogICAgIGVtaXRT
dG9yZUJvb2woZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC02MTQsNyArMzkxLDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdExvYWQyKHNyYzEsIHJlZ1Qx
LCByZWdUMCwgc3JjMiwgcmVnVDMsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYzEsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBy
ZWdUMywgcmVnVDIpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwg
cmVnVDMpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDEpKTsKICAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihCZWxvdywgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dl
c3RUYWcpKSk7CkBAIC02MzQsMTQgKzQxMiwxNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wRXFKdW1w
U2xvdyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBDb21waWxlT3BFcQog
ICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hJZk5vdFN0cmluZyhyZWdUMikpOwogCiAgICAg
Ly8gU3RyaW5nIGNhc2UuCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5n
RXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZVN0cmluZ0VxLCByZWdUMSwgcmVnVDAsIHJlZ1QyKTsKICAgICBlbWl0SnVtcFNsb3dU
b0hvdChicmFuY2hUZXN0MzIodHlwZSA9PSBDb21waWxlT3BFcVR5cGU6OkVxID8gTm9uWmVybyA6
IFplcm8sIHJldHVyblZhbHVlR1BSKSwganVtcFRhcmdldCk7CiAgICAgZG9uZS5hcHBlbmQoanVt
cCgpKTsKIAogICAgIC8vIEdlbmVyaWMgY2FzZS4KICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0
U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgbV9wcm9maWxlZENvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMikpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKHR5cGUgPT0gQ29tcGlsZU9wRXFUeXBlOjpFcSA/IE5vblplcm8gOiBaZXJv
LCByZXR1cm5WYWx1ZUdQUiksIGp1bXBUYXJnZXQpOwogCiAgICAgZG9uZS5saW5rKHRoaXMpOwpA
QCAtNjYxLDcgKzQ0MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX25lcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNv
ZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKIAot
ICAgIGVtaXRMb2FkMihzcmMxLCByZWdUMSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCByZWdUMik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZDZWxsKHJlZ1QxKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwpAQCAtNjg2LDEzICs0NjcsMTUgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2UKICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZO
b3RTdHJpbmcocmVnVDIpKTsKIAogICAgIC8vIFN0cmluZyBjYXNlLgotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgcmVnVDEsIHJlZ1QwLCBy
ZWdUMik7CiAgICAgc3RvcmVSZXN1bHQuYXBwZW5kKGp1bXAoKSk7CiAKICAgICAvLyBHZW5lcmlj
IGNhc2UuCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gZG91
YmxlcwogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMikpOwogCiAgICAgc3RvcmVSZXN1bHQubGluayh0aGlzKTsKICAgICB4b3IzMihUcnVz
dGVkSW1tMzIoMHgxKSwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtNzA2LDcgKzQ4OSw4IEBAIHZvaWQg
SklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0TG9hZDIoc3JjMSwgcmVn
VDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjMSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIs
IHJlZ1QzLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qx
LCByZWdUMykpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMSkpOwogICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKEJlbG93LCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxv
d2VzdFRhZykpKTsKQEAgLTcyOSw3ICs1MTMsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0
RXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0g
Ynl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0TG9hZDIoc3JjMSwgcmVnVDEsIHJlZ1QwLCBzcmMy
LCByZWdUMywgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDEs
IHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIHJlZ1QzLCByZWdUMik7
CiAKICAgICAvLyBCYWlsIGlmIHRoZSB0YWdzIGRpZmZlciwgb3IgYXJlIGRvdWJsZS4KICAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7CkBAIC03NjksMTEg
KzU1NCwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRl
Y29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwog
Ci0gICAgZW1pdExvYWQyKHNyYzEsIHJlZ1QxLCByZWdUMCwgc3JjMiwgcmVnVDMsIHJlZ1QyKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCByZWdUMywgcmVnVDIpOwogCiAgICAgLy8gQmFpbCBp
ZiB0aGUgdGFncyBkaWZmZXIsIG9yIGFyZSBkb3VibGUuCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMykpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEJl
bG93LCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dl
c3RUYWcpKSk7CiAKICAgICAvLyBKdW1wIHRvIGEgc2xvdyBjYXNlIGlmIGJvdGggYXJlIHN0cmlu
Z3Mgb3Igc3ltYm9scyAobm9uIG9iamVjdCkuCiAgICAgSnVtcCBub3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QxKTsKQEAgLTgwNSw3ICs1OTEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
anN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0
ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZVN0cmljdEVxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlU3RyaWN0RXEsIHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCkBAIC04MTUsOTEgKzYwMiwxOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgbV9wcm9maWxlZENvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUNCwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRXFOdWxsPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1p
dExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDEpOwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBi
cmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92
ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QxKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihF
cXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBq
dW1wKCk7Ci0KLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotCi0gICAgY29tcGFyZTMyKEVx
dWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpLCByZWdUMik7Ci0gICAg
Y29tcGFyZTMyKEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRh
ZyksIHJlZ1QxKTsKLSAgICBvcjMyKHJlZ1QyLCByZWdUMSk7Ci0KLSAgICB3YXNOb3RJbW1lZGlh
dGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7Ci0KLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVtaXRMb2FkKHNyYywgcmVn
VDEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qx
KTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9u
WmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMy
KDEpLCByZWdUMSk7Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVt
cCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9i
YWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1Qw
LCByZWdUMiwgcmVnVDEpOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0g
ICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLQotICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVn
VDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSwgcmVnVDIpOwotICAgIGNvbXBhcmUz
MihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZWdUMSk7Ci0gICAgYW5kMzIocmVnVDIsIHJlZ1QxKTsKLQotICAgIHdhc05vdEltbWVkaWF0ZS5s
aW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsK
LQotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29w
X3Rocm93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUaHJvdz4oKTsKLSAgICBBU1NF
UlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwotICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7Ci0gICAgZW1pdExvYWQo
Ynl0ZWNvZGUubV92YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNl
cHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwotICAgIGp1bXBUb0V4Y2VwdGlvbkhh
bmRsZXIodm0oKSk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5t
X29wZXJhbmQ7CiAKLSAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QxLCByZWdUMCk7CiAKICAgICBKdW1wIGlzSW50MzIg
PSBicmFuY2hJZkludDMyKHJlZ1QxKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwpAQCAtOTE3
LDcgKzYzMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwogICAgIEpTVmFsdWVSZWdzIGFyZ3VtZW50VmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCk7CiAKLSAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QxLCByZWdUMCk7CiAKICAgICBKdW1wIGlzTm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFw
QmlnSW50KHJlZ1QwKSk7CkBAIC05MzgsNyArNjUyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
c3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QxLCByZWdUMCk7CiAKICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdFN0cmluZyhyZWdUMCkpOwpAQCAtOTUzLDcgKzY2Nyw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdExvYWQoc3JjLCByZWdUMSwg
cmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMSwgcmVnVDApOwog
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKQEAgLTEwMjUsNzQgKzczOSwxMSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY3VycmVudFNjb3Bl
ID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBlbWl0TG9hZFBheWxvYWQoY3VycmVudFNjb3BlLCBy
ZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoY3VycmVudFNjb3BlLCBy
ZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQo
KSksIHJlZ1QwKTsKICAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCByZWdUMCk7CiB9
CiAKLXZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFN3aXRjaEltbT4oKTsKLSAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1f
dGFibGVJbmRleDsKLSAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwotCi0gICAgLy8gY3JlYXRl
IGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0
YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07Ci0gICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxl
SW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1l
ZGlhdGUpKTsKLSAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsK
LQotICAgIGVtaXRMb2FkKHNjcnV0aW5lZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBhdXRvIG5vdElu
dDMyID0gYnJhbmNoSWZOb3RJbnQzMihyZWdUMSk7Ci0gICAgc3ViMzIoSW1tMzIodW5saW5rZWRU
YWJsZS5tX21pbiksIHJlZ1QwKTsKLQotICAgIGFkZEp1bXAoYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCByZWdUMCwgSW1tMzIobGlua2VkVGFibGUubV9jdGlPZmZzZXRzLnNpemUoKSkpLCBkZWZhdWx0
T2Zmc2V0KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobGlua2VkVGFibGUubV9jdGlPZmZzZXRz
LmRhdGEoKSksIHJlZ1QxKTsKLSAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFNj
YWxlUHRyKSwgcmVnVDEpOwotICAgIGZhckp1bXAocmVnVDEsIE5vUHRyVGFnKTsKLQotICAgIG5v
dEludDMyLmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3Bl
cmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCAmdm0oKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7Ci0gICAgZmFySnVt
cChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9zd2l0
Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoQ2hhcj4oKTsKLSAg
ICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsKLSAgICB1bnNpZ25l
ZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVj
b2RlLm1fc2NydXRpbmVlOwotCi0gICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBk
ZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxp
bmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fcHJvZmlsZWRDb2RlQmxvY2st
PnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJs
ZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07Ci0gICAgbV9z
d2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwg
ZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKLSAgICBsaW5rZWRUYWJs
ZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKLQotICAgIGVtaXRMb2FkKHNjcnV0aW5l
ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJX
aXRoVW5rbm93bktleVR5cGUsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWlu
KTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN3
aXRjaFN0cmluZz4oKTsKLSAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJ
bmRleDsKLSAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwotCi0gICAgLy8gY3JlYXRlIGp1bXAg
dGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVu
dC4KLSAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1f
cHJvZmlsZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1
bXBUYWJsZXNbdGFibGVJbmRleF07Ci0gICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3Jk
KHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3Jk
OjpTdHJpbmcpKTsKLSAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxl
KTsKLQotICAgIGVtaXRMb2FkKHNjcnV0aW5lZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgbV9wcm9maWxl
ZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRh
YmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKLX0KLQog
dm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBlbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpOwpAQCAtMTEwMCw3ICs3
NTEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIC8vIEV2ZW4gdGhvdWdoIEpJVCBjb2RlIGRvZXNuJ3QgdXNlIHRo
ZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBz
dGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8g
b2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIGZvciAodW5z
aWduZWQgaSA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVh
bFJlZ2lzdGVycygpOyBpIDwgbV9wcm9maWxlZENvZGVCbG9jay0+bnVtVmFycygpOyArK2kpCisg
ICAgc2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bnVtVmFycygpOworICAgIGZv
ciAoc2l6ZV90IGkgPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1Zp
cnR1YWxSZWdpc3RlcnMoKTsgaSA8IGNvdW50OyArK2kpCiAgICAgICAgIGVtaXRTdG9yZSh2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwganNVbmRlZmluZWQoKSk7CiAKICAgICBKSVRTbG93UGF0
aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2Vu
dGVyKTsKQEAgLTExMTYsMTY0ICs3NjgsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFN0b3JlQ2Vs
bChkc3QsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWU7Ci0gICAgV3JpdGVCYXJyaWVyQmFz
ZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKLSAg
ICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgcmFyZURhdGFS
ZWcgPSByZWdUNDsKLSAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwotICAgIFJlZ2lz
dGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcg
PSByZWdUMjsKLSAgICBSZWdpc3RlcklEIGNhY2hlZEZ1bmN0aW9uUmVnID0gcmVnVDQ7Ci0gICAg
UmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDM7Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQoY2Fs
bGVlLCBjYWxsZWVSZWcpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90RnVuY3Rpb24oY2Fs
bGVlUmVnKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zm
c2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmFyZURhdGFSZWcpOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmFyZURhdGFSZWcsIFRydXN0ZWRJbW0zMihKU0Z1bmN0
aW9uOjpyYXJlRGF0YVRhZykpKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVu
Y3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZkFsbG9jYXRvcigpIC0gSlNG
dW5jdGlvbjo6cmFyZURhdGFUYWcpLCBhbGxvY2F0b3JSZWcpOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRP
ZlN0cnVjdHVyZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBzdHJ1Y3R1cmVSZWcpOwot
Ci0gICAgbG9hZFB0cihjYWNoZWRGdW5jdGlvbiwgY2FjaGVkRnVuY3Rpb25SZWcpOwotICAgIEp1
bXAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcyA9IGJyYW5jaFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rp
b25SZWcsIFRydXN0ZWRJbW1QdHIoSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkp
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIGNhbGxlZVJlZywgY2FjaGVk
RnVuY3Rpb25SZWcpKTsKLSAgICBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzLmxpbmsodGhpcyk7Ci0K
LSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1t
UHRyKG51bGxwdHIpOwotICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxs
b2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgYnV0dGVyZmx5
LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwotICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVn
LCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKLSAgICBl
bWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKLSAgICBh
ZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3Qs
IHJlc3VsdFJlZyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZUlEKiBjYWNo
ZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZUlEOwotICAgIFZpcnR1
YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIgPSBieXRlY29kZS5tX3NyY0RzdDsKLQotICAgIGVtaXRM
b2FkKHRoaXNSZWdpc3RlciwgcmVnVDMsIHJlZ1QyKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90Q2VsbChyZWdUMykpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdU
MiwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVy
ZUlELCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwg
cmVnVDIpKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsKLSAgICBlbWl0TG9hZFRhZyhieXRlY29kZS5t
X3RhcmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJUYWcoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3By
b2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJs
b2NrKTsKLSAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1f
dHlwZUxvY2F0aW9uOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVj
b2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwotCi0gICAgLy8gTG9hZCBwYXlsb2FkIGluIFQw
LiBMb2FkIHRhZyBpbiBUMy4KLSAgICBlbWl0TG9hZFBheWxvYWQodmFsdWVUb1Byb2ZpbGUsIHJl
Z1QwKTsKLSAgICBlbWl0TG9hZFRhZyh2YWx1ZVRvUHJvZmlsZSwgcmVnVDMpOwotCi0gICAgSnVt
cExpc3QganVtcFRvRW5kOwotCi0gICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZkVtcHR5KHJl
Z1QzKSk7Ci0KLSAgICAvLyBDb21waWxlIGluIGEgcHJlZGljdGl2ZSB0eXBlIGNoZWNrLCBpZiBw
b3NzaWJsZSwgdG8gc2VlIGlmIHdlIGNhbiBza2lwIHdyaXRpbmcgdG8gdGhlIGxvZy4KLSAgICAv
LyBUaGVzZSB0eXBlY2hlY2tzIGFyZSBpbmxpbmVkIHRvIG1hdGNoIHRob3NlIG9mIHRoZSAzMi1i
aXQgSlNWYWx1ZSB0eXBlIGNoZWNrcy4KLSAgICBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xh
c3RTZWVuVHlwZSA9PSBUeXBlVW5kZWZpbmVkKQotICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJy
YW5jaElmVW5kZWZpbmVkKHJlZ1QzKSk7Ci0gICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9u
LT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlTnVsbCkKLSAgICAgICAganVtcFRvRW5kLmFwcGVuZChi
cmFuY2hJZk51bGwocmVnVDMpKTsKLSAgICBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1f
bGFzdFNlZW5UeXBlID09IFR5cGVCb29sZWFuKQotICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJy
YW5jaElmQm9vbGVhbihyZWdUMywgSW52YWxpZEdQUlJlZykpOwotICAgIGVsc2UgaWYgKGNhY2hl
ZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZUFueUludCkKLSAgICAgICAganVt
cFRvRW5kLmFwcGVuZChicmFuY2hJZkludDMyKHJlZ1QzKSk7Ci0gICAgZWxzZSBpZiAoY2FjaGVk
VHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlTnVtYmVyKSB7Ci0gICAgICAgIGp1
bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZOdW1iZXIoSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QwKSwg
cmVnVDEpKTsKLSAgICB9IGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5
cGUgPT0gVHlwZVN0cmluZykgewotICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMyk7Ci0gICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZTdHJpbmcocmVn
VDApKTsKLSAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgfQotCi0gICAgLy8gTG9h
ZCB0aGUgdHlwZSBwcm9maWxpbmcgbG9nIGludG8gVDIuCi0gICAgVHlwZVByb2ZpbGVyTG9nKiBj
YWNoZWRUeXBlUHJvZmlsZXJMb2cgPSBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoY2FjaGVkVHlwZVByb2ZpbGVyTG9nKSwgcmVnVDIpOwotCi0gICAgLy8g
TG9hZCB0aGUgbmV4dCBsb2cgZW50cnkgaW50byBUMS4KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDIsIFR5cGVQcm9maWxlckxvZzo6Y3VycmVudExvZ0VudHJ5T2Zmc2V0KCkpLCByZWdUMSk7Ci0K
LSAgICAvLyBTdG9yZSB0aGUgSlNWYWx1ZSBvbnRvIHRoZSBsb2cgZW50cnkuCi0gICAgc3RvcmUz
MihyZWdUMCwgQWRkcmVzcyhyZWdUMSwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6dmFsdWVP
ZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwot
ICAgIHN0b3JlMzIocmVnVDMsIEFkZHJlc3MocmVnVDEsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50
cnk6OnZhbHVlT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFn
KSkpOwotCi0gICAgLy8gU3RvcmUgdGhlIHN0cnVjdHVyZUlEIG9mIHRoZSBjZWxsIGlmIGFyZ3Vt
ZW50IGlzIGEgY2VsbCwgb3RoZXJ3aXNlLCBzdG9yZSAwIG9uIHRoZSBsb2cgZW50cnkuCi0gICAg
SnVtcCBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QzKTsKLSAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwotICAgIHN0b3Jl
MzIocmVnVDAsIEFkZHJlc3MocmVnVDEsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpKTsKLSAgICBKdW1wIHNraXBOb3RDZWxsID0ganVtcCgpOwotICAgIG5v
dENlbGwubGluayh0aGlzKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhy
ZWdUMSwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6c3RydWN0dXJlSURPZmZzZXQoKSkpOwot
ICAgIHNraXBOb3RDZWxsLmxpbmsodGhpcyk7Ci0KLSAgICAvLyBTdG9yZSB0aGUgdHlwZUxvY2F0
aW9uIG9uIHRoZSBsb2cgZW50cnkuCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVM
b2NhdGlvbiksIHJlZ1QwKTsKLSAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBUeXBl
UHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojpsb2NhdGlvbk9mZnNldCgpKSk7Ci0KLSAgICAvLyBJbmNy
ZW1lbnQgdGhlIGN1cnJlbnQgbG9nIGVudHJ5LgotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6
ZW9mKFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnkpKSwgcmVnVDEpOwotICAgIHN0b3JlMzIocmVn
VDEsIEFkZHJlc3MocmVnVDIsIFR5cGVQcm9maWxlckxvZzo6Y3VycmVudExvZ0VudHJ5T2Zmc2V0
KCkpKTsKLSAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDEsIFRy
dXN0ZWRJbW1QdHIoY2FjaGVkVHlwZVByb2ZpbGVyTG9nLT5sb2dFbmRQdHIoKSkpKTsKLSAgICAv
LyBDbGVhciB0aGUgbG9nIGlmIHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIGxvZy4KLSAgICBjYWxs
T3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25Qcm9jZXNzVHlwZVByb2ZpbGVyTG9n
LCAmdm0oKSk7Ci0KLSAgICBqdW1wVG9FbmQubGluayh0aGlzKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2Vu
KCkpOwotICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwotICAgIHN0YXRpY19hc3NlcnQobm9uQXJn
R1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2Js
ZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZT4oKTsKLSAgICBHUFJSZWcgc2hh
ZG93UGFja2V0UmVnID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BS
MDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgotICAgIEdQUlJlZyBz
Y3JhdGNoMlJlZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwg
c2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwotCi0gICAgc2NyYXRj
aDFSZWcgPSByZWdUNDsKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVn
VDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChzaGFkb3dQYWNrZXRSZWcs
IHNjcmF0Y2gxUmVnLCByZWdUMyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3df
Y2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2VuKCkpOwotICAgIHVwZGF0ZVRvcENh
bGxGcmFtZSgpOwotICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25B
cmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4i
KTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRv
d0NoaWNrZW5UYWlsPigpOwotICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAg
ICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24t
YXJndW1lbnQgcmVnaXN0ZXIuCi0gICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAg
ZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gx
UmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fdGhpc1Zh
bHVlLCByZWdUMik7Ci0gICAgZW1pdExvYWRUYWcoYnl0ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1Qx
KTsKLSAgICBKU1ZhbHVlUmVncyB0aGlzUmVncyhyZWdUMSwgcmVnVDIpOwotICAgIGVtaXRMb2Fk
UGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRh
aWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVncywgcmVnVDMsIFRydXN0ZWRJbW1QdHIo
bV9wcm9maWxlZENvZGVCbG9jayksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7Ci19
Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXgg
OTU3Njk1YjMwZTkzOTliYmEwZTMwZjJlZmY0OTBkMzBmYjY3Y2I1Zi4uMDYzMTEyYTVkZGQ0MjVl
N2VmMWVmZDJkNmUyNGViNDg5YjQ4YmIyMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTc3NSwxNCArNzc1LDEyIEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3B1dF9wcml2YXRlX25h
bWVfcHJlcGFyZUNhbGxHCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAK
LSNpZiBVU0UoSlNWQUxVRTY0KQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeUlkPigpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50
MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKICAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5
SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KQEAgLTc5MCw5ICs3ODgs
OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50
MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QxKTsKICAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KQEAgLTgwMCwxMCArNzk4
LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0
dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJC
eUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdU
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUubV9iYXNlLCBy
ZWdUMCk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChieXRlY29kZS5tX2dldHRlciwgcmVnVDEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdU
Mik7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QzLCByZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEs
IHJlZ1QyKTsKIH0KQEAgLTgxMSwyNiArODA5LDQwIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9n
ZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBk
ZWNsdHlwZShvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCk7CisgICAgY29uc3RleHByIEdQUlJlZyBn
bG9iYWxPYmplY3RHUlAgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAwPigp
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNs
b3dPcGVyYXRpb24sIDE+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHByb3BlcnR5SlNS
ID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMj4oKTsKKyAgICAvLyBBdHRy
aWJ1dGVzIGluIGFyZ3VtZW50IDMKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNldHRlckdQUiA9IHBy
ZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDQ+KCk7CisKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyUGF5bG9hZChieXRlY29kZS5tX2Jhc2UsIGJhc2VHUFIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcHJvcGVydHlKU1IpOwogICAg
IGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5
VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUubV9hY2Nlc3Nvciwgc2V0dGVyR1BSKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdSUCk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgZ2xvYmFsT2JqZWN0R1JQLCBiYXNlR1BSLCBwcm9w
ZXJ0eUpTUiwgYXR0cmlidXRlcywgc2V0dGVyR1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRl
ckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBy
ZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwot
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0U2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsK
LX0KIAotI2VuZGlmCisgICAgdXNpbmcgU2xvd09wZXJhdGlvbiA9IGRlY2x0eXBlKG9wZXJhdGlv
blB1dFNldHRlckJ5VmFsKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdSUCA9
IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHBy
IEdQUlJlZyBiYXNlR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMT4o
KTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcHJvcGVydHlKU1IgPSBwcmVmZXJyZWRBcmd1
bWVudEpTUjxTbG93T3BlcmF0aW9uLCAyPigpOworICAgIC8vIEF0dHJpYnV0ZXMgaW4gYXJndW1l
bnQgMworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2V0dGVyR1BSID0gcHJlZmVycmVkQXJndW1lbnRH
UFI8U2xvd09wZXJhdGlvbiwgND4oKTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXls
b2FkKGJ5dGVjb2RlLm1fYmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Byb3BlcnR5LCBwcm9wZXJ0eUpTUik7CisgICAgaW50MzJfdCBhdHRyaWJ1
dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQ
YXlsb2FkKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHNldHRlckdQUik7CisgICAgbG9hZEdsb2JhbE9i
amVjdChnbG9iYWxPYmplY3RHUlApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0
dGVyQnlWYWwsIGdsb2JhbE9iamVjdEdSUCwgYmFzZUdQUiwgcHJvcGVydHlKU1IsIGF0dHJpYnV0
ZXMsIHNldHRlckdQUik7Cit9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewpAQCAtMTk1OCwxMzAgKzE5NzAsNiBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX3ByaXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVgogICAgIGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29k
ZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpI
YXNQcml2YXRlQnJhbmQpOwogfQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLQotdm9pZCBKSVQ6OmVt
aXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQotewotICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7Ci19Ci0KLQotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLXZvaWQg
SklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFJlc29sdmVTY29wZT4oKTsKLSAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9yZXNvbHZlVHlwZTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLQotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Nv
cGVHUFIgPSByZWdUMDsKLQotICAgIEp1bXBMaXN0IHNsb3dDYXNlOwotCi0gICAgYXV0byBkb1Zh
ckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJS
ZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52YWxpZEdQUlJlZykgewotICAgICAgICBpZiAoIW5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoZ2xv
YmFsT2JqZWN0R1BSID09IEludmFsaWRHUFJSZWcpIHsKLSAgICAgICAgICAgIGdsb2JhbE9iamVj
dEdQUiA9IHJlZ1Q0OwotICAgICAgICAgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RH
UFIpOwotICAgICAgICB9Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIs
IE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50
KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJl
c3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJ
c0ludmFsaWRhdGVkKSkpOwotICAgIH07Ci0KLSAgICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9
IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewotICAgICAgICBkb1ZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgbG9hZDMyRnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTG9jYWxT
Y29wZURlcHRoKCksIHJlZ1QxKTsKLQotICAgICAgICBBU1NFUlQoc2NvcGVHUFIgPT0gcmVnVDAp
OwotICAgICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJh
bmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICAgICAgc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCByZWdUMSk7Ci0gICAgICAgIGp1bXAoKS5saW5rVG8obG9vcCwgdGhpcyk7Ci0gICAg
ICAgIGRvbmUubGluayh0aGlzKTsKLSAgICB9OwotCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAo
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkg
ewotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29u
c3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCku
Ci0gICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKLSAgICAgICAgICAgIGRvVmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdU
MCk7Ci0gICAgICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNj
b3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCksIHJlZ1Qx
KTsKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9j
aCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAg
Y2FzZSBHbG9iYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgotICAgICAgICBjYXNlIEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICAvLyBKU1Nj
b3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKSBmb3IgR2xvYmFsVmFyKiwKLSAgICAgICAgICAgIC8vIGFuZCBjb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSBmb3IgR2xvYmFsTGV4aWNh
bFZhciouCi0gICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKLSAgICAgICAgICAg
IGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
LCByZWdUMCk7Ci0gICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZh
ciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0
OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBj
YXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFJl
c29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZXNv
bHZlZENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICBjYXNlIFVu
cmVzb2x2ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBN
b2R1bGVWYXIpIAotICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29s
dmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTGV4aWNhbEVudmlyb25tZW50KCksIHJlZ1QwKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVH
UFIpOwotICAgICAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyIHx8IHBy
b2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0g
ICAgICAgICAgICBlbWl0Q29kZShwcm9maWxlZFJlc29sdmVUeXBlKTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Ci0K
LSAgICAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgICAgIGxvYWQzMkZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlJlc29s
dmVUeXBlKCksIHJlZ1QxKTsKLQotICAgICAgICAgICAgYXV0byBlbWl0Q2FzZSA9IFsmXSAoUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgICAgICAgICBKdW1wIG5vdENhc2UgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAg
ICAgICAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgICAgICAgICAgbm90Q2FzZS5saW5rKHRoaXMp
OwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgZW1pdENhc2UoR2xvYmFsVmFyKTsKLSAg
ICAgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgICAgIGVtaXRDYXNl
KEdsb2JhbExleGljYWxWYXIpOwotICAgICAgICAgICAgZW1pdENhc2UoR2xvYmFsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgICAgICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5k
KGp1bXAoKSk7Ci0KLSAgICAgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2UpOwotCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwotfQotCi0jZWxzZQogdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwpAQCAt
MjA5NCwyMSArMTk4MiwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5k
ZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJbmRleCk7CiAgICAgQVNTRVJUKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50
SW5zdHJ1Y3Rpb24pOwogCi0gICAgLy8gSWYgd2UgcHJvZmlsZSBjZXJ0YWluIHJlc29sdmUgdHlw
ZXMsIHdlJ3JlIGdhdXJhbnRlZWQgYWxsIGxpbmtlZCBjb2RlIHdpbGwgaGF2ZSB0aGUgc2FtZQor
ICAgIC8vIElmIHdlIHByb2ZpbGUgY2VydGFpbiByZXNvbHZlIHR5cGVzLCB3ZSdyZSBndWFyYW50
ZWVkIGFsbCBsaW5rZWQgY29kZSB3aWxsIGhhdmUgdGhlIHNhbWUKICAgICAvLyByZXNvbHZlIHR5
cGUuCiAKICAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIAotICAgICAg
ICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6
Om9mZnNldE9mTGV4aWNhbEVudmlyb25tZW50KCksIHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0ckZy
b21NZXRhZGF0YShieXRlY29kZSwgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkxl
eGljYWxFbnZpcm9ubWVudCgpLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZWxzZSB7CiAgICAgICAg
IHVpbnQzMl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEo
KS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOwogCiAgICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUMjsKICAgICAgICAgY29uc3RleHByIEdQUlJlZyBzY29w
ZUdQUiA9IHJlZ1QwOwotICAgICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BS
ID0gcmVnVDU7CisgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBy
ZWdUMzsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKHNjb3BlLCBzY29wZUdQUik7
CiAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWV0YWRhdGFPZmZzZXQpLCBzX21ldGFkYXRh
R1BSLCBtZXRhZGF0YUdQUik7Ci0KICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVP
ZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOwpAQCAtMjEzNCw3ICsyMDIxLDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CiAgICAgfQogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGJv
eENlbGwocmV0dXJuVmFsdWVHUFIsIHJldHVyblZhbHVlSlNSKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVKU1IpOwogfQogCiB0ZW1wbGF0ZSA8UmVzb2x2ZVR5
cGUgcHJvZmlsZWRSZXNvbHZlVHlwZT4KQEAgLTIxNTAsOCArMjAzOCwxMSBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRo
dW5rKFZNJiB2bSkKICAgICB1c2luZyBNZXRhZGF0YSA9IE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0
YTsKICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDI7IC8vIGluY29taW5n
CiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOyAvLyBpbmNvbWluZwotICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsgLy8gaW5jb21pbmcg
LSBwYXNzIHRocnUgdG8gc2xvdyBwYXRoLgorICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVP
ZmZzZXRHUFIgPSByZWdUMzsgLy8gaW5jb21pbmcgLSBwYXNzIHRocnUgdG8gc2xvdyBwYXRoLgor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q1OyAvLyBsb2NhbCB0ZW1wb3Jh
cnkKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZzZXRHUFIpOworICAgIHN0YXRpY19hc3Nl
cnQobm9PdmVybGFwKHJldHVyblZhbHVlR1BSLCBtZXRhZGF0YUdQUiwgYnl0ZWNvZGVPZmZzZXRH
UFIsIHNjcmF0Y2hHUFIpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHNjb3BlR1BSID09IHJldHVyblZh
bHVlR1BSKTsgLy8gZW1pdFJlc29sdmVDbG9zdXJlIGFzc3VtZXMgdGhpcwogCiAgICAgaml0LnRh
Z1JldHVybkFkZHJlc3MoKTsKIApAQCAtMjE2MSwyMyArMjA1MiwyMyBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5r
KFZNJiB2bSkKICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgaWYgKGdsb2JhbE9iamVjdEdQUiA9PSBJbnZhbGlkR1BSUmVn
KSB7Ci0gICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKLSAgICAgICAgICAgIGpp
dC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwot
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRP
Zkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICAgICAgICAgIGdsb2JhbE9i
amVjdEdQUiA9IHNjcmF0Y2hHUFI7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAgICB9Ci0gICAgICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3Qs
IG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFw
cGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zm
c2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9i
YWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIs
IFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSkpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1l
dGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZMb2NhbFNjb3BlRGVwdGgoKSksIHJlZ1QxKTsK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NvcGVHUFIgPT0gcmVnVDApOworICAgICAgICBqaXQu
bG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkxvY2FsU2NvcGVE
ZXB0aCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjb3BlR1BSID09
IHJldHVyblZhbHVlR1BSKTsKIAogICAgICAgICBMYWJlbCBsb29wID0gaml0LmxhYmVsKCk7Ci0g
ICAgICAgIEp1bXAgZG9uZSA9IGppdC5icmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOwotICAgICAg
ICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJl
Z1QwKTsKLSAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAg
ICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDMyKFplcm8sIHNjcmF0Y2hHUFIpOworICAgICAg
ICBqaXQubG9hZFB0cihBZGRyZXNzKHJldHVyblZhbHVlR1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5l
eHQoKSksIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgc2NyYXRjaEdQUik7CiAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKGxvb3AsICZqaXQpOwog
ICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgfTsKQEAgLTIxODcsMTEgKzIwNzgsMTEgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BSZXNv
bHZlU2NvcGVUaHVuayhWTSYgdm0pCiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAg
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAg
ICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKS4KLSAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOwotICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVz
cyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9j
aCgpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4
aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZH
bG9iYWxPYmplY3QoKSksIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZXR1cm5WYWx1
ZUdQUik7CisgICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFk
YXRhOjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVz
cyhyZXR1cm5WYWx1ZUdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJp
bmRpbmdFcG9jaCgpKSwgc2NyYXRjaEdQUikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIApAQCAtMjIwMSwxMSArMjA5MiwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZNJiB2bSkKICAgICAg
ICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAg
ICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9yIEdsb2JhbFZhciosCiAgICAgICAgICAgICAvLyBhbmQg
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkgZm9y
IEdsb2JhbExleGljYWxWYXIqLgotICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7Ci0gICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IGppdC5sb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2Jh
bE9iamVjdCgpKSwgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJldHVyblZhbHVlR1BS
KTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJl
c29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAg
ICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0Ojpv
ZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmVnVDApOworICAgICAgICAgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmV0dXJuVmFsdWVHUFIsIEpTR2xvYmFsT2JqZWN0Ojpv
ZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpKSwgcmV0dXJuVmFsdWVHUFIpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAt
MjI4NCwyNCArMjE3NSwyNSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJiB2bQogICAgIC8vIFRoZSBm
YXN0IHBhdGggYWxyZWFkeSBwdXNoZWQgdGhlIHJldHVybiBhZGRyZXNzLgogI2lmIENQVShYODZf
NjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjplYnApOwotI2VsaWYgQ1BVKEFSTTY0KQor
I2VsaWYgQ1BVKEFSTTY0KSB8fCBDUFUoQVJNX1RIVU1CMikKICAgICBqaXQucHVzaFBhaXIoZnJh
bWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisjZWxpZiBDUFUoTUlQUykKKyAgICBq
aXQucHVzaFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6OnJhKTsKKyNl
bHNlCisjICAgZXJyb3IgIk5vdCBpbXBsZW1lbnRlZCBvbiBwbGF0Zm9ybSIKICNlbmRpZgogCi0g
ICAgY29uc3RleHByIEdQUlJlZyBpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDM7CiAg
ICAgaml0LnN0b3JlMzIoaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAKLSAgICBjb25zdGV4cHIgR1BS
UmVnIGNvZGVCbG9ja0dQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2hHUFIgPSByZWdUMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9
IGFyZ3VtZW50R1BSMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIGluc3RydWN0aW9uR1BSID0gYXJn
dW1lbnRHUFIxOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKGluY29taW5nQnl0ZWNvZGVP
ZmZzZXRHUFIsIHNjcmF0Y2hHUFIgLCBnbG9iYWxPYmplY3RHUFIsIGluc3RydWN0aW9uR1BSKSk7
CiAKLSAgICBzdGF0aWNfYXNzZXJ0KGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIgIT0gY29kZUJs
b2NrR1BSKTsKLSAgICBzdGF0aWNfYXNzZXJ0KGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIgIT0g
Z2xvYmFsT2JqZWN0R1BSKTsKLSAgICBzdGF0aWNfYXNzZXJ0KGluY29taW5nQnl0ZWNvZGVPZmZz
ZXRHUFIgIT0gaW5zdHJ1Y3Rpb25HUFIpOwotCi0gICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBjb2RlQmxvY2tHUFIpOwotICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkp
LCBnbG9iYWxPYmplY3RHUFIpOwotICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoY29kZUJsb2NrR1BS
LCBDb2RlQmxvY2s6Om9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgaW5zdHJ1Y3Rp
b25HUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgc2NyYXRjaEdQUik7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBD
b2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAg
IGppdC5sb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkluc3Ry
dWN0aW9uc1Jhd1BvaW50ZXIoKSksIGluc3RydWN0aW9uR1BSKTsKICAgICBqaXQuYWRkUHRyKGlu
Y29taW5nQnl0ZWNvZGVPZmZzZXRHUFIsIGluc3RydWN0aW9uR1BSKTsKIAogICAgIGppdC5zZXR1
cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25SZXNvbHZlU2NvcGVGb3JCYXNlbGluZSk+KGds
b2JhbE9iamVjdEdQUiwgaW5zdHJ1Y3Rpb25HUFIpOwpAQCAtMjMxMSw4ICsyMjAzLDEyIEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3Jlc29sdmVf
c2NvcGVHZW5lcmF0b3IoVk0mIHZtCiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wb3AoWDg2
UmVnaXN0ZXJzOjplYnApOwotI2VsaWYgQ1BVKEFSTTY0KQotICAgIGppdC5wb3BQYWlyKENDYWxs
SGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6bGlua1JlZ2lzdGVy
KTsKKyNlbGlmIENQVShBUk02NCkgfHwgQ1BVKEFSTV9USFVNQjIpCisgICAgaml0LnBvcFBhaXIo
ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisjZWxpZiBDUFUoTUlQUykKKyAg
ICBqaXQucG9wUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgTUlQU1JlZ2lzdGVyczo6cmEpOwor
I2Vsc2UKKyMgICBlcnJvciAiTm90IGltcGxlbWVudGVkIG9uIHBsYXRmb3JtIgogI2VuZGlmCiAg
ICAgaml0LnJldCgpOwogCkBAIC0yMzIyLDE3MiArMjIxOCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3Io
Vk0mIHZtCiAgICAgcGF0Y2hCdWZmZXIubGluayhleGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9u
TGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19v
cF9yZXNvbHZlX3Njb3BlIik7CiB9Ci0jZW5kaWYgLy8gIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogCi12b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVy
IHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQotewotICAgIGxvYWRQdHIoc3RydWN0
dXJlU2xvdCwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1Qw
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qx
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRH
ZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcgcmVnKQotewotICAgIGxv
YWRQdHIob3BlcmFuZCwgcmVnKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tSW5kaXJl
Y3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcgcmVnKQotewotICAgIGxvYWRQdHIo
b3BlcmFuZCwgcmVnKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnKSwgcmVnKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90
IG9wZXJhbmQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwot
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9m
VmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwKTsKLX0KLQot
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLXZvaWQgSklUOjplbWl0X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdp
c3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRS
ZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0
UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotCi0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9
IHJlZ1QyOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKLQot
ICAgIEp1bXBMaXN0IHNsb3dDYXNlOwotCi0gICAgYXV0byBkb1ZhckluamVjdGlvbkNoZWNrID0g
WyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7Ci0gICAgICAgIGlmICghbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9P
RkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1Qz
KTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMs
IFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRh
dGVkKSkpOwotICAgIH07Ci0gICAgCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVy
cyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRo
aW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFu
ZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBsb2FkUHRy
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9m
U3RydWN0dXJlKCksIHJlZ1QxKTsKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hU
ZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwg
U3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOwotCi0gICAgICAgICAgICBqaXRBc3NlcnQo
c2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAg
ICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwot
ICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRP
Zkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQ
dHIoRXF1YWwsIHNjb3BlR1BSLCByZWdUMyk7Ci0gICAgICAgICAgICB9KSk7Ci0KLSAgICAgICAg
ICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QxKTsKLQotICAgICAgICAgICAgaWYgKEFTU0VSVF9F
TkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdy
ZWF0ZXJUaGFuT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNl
dCkpOwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9m
TGluZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBuZWczMihyZWdUMSk7Ci0g
ICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgICAgICAgICAg
bG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGlu
ZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlZ1QwKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyOgotICAgICAgICBj
YXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgIGNhc2UgR2xvYmFs
TGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczoKLSAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJl
Z1QwKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCksIHJlZ1QwKTsKLSAgICAg
ICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBl
ID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2su
Ci0gICAgICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDApKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNh
c2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBkb1Zhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAg
ICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEZyb21TY29wZTo6TWV0
YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMyk7Ci0gICAgICAgICAgICBzdGF0aWNfYXNz
ZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgIGxzaGlmdDY0KFRy
dXN0ZWRJbW0zMigzKSwgcmVnVDMpOwotICAgICAgICAgICAgYWRkUHRyKHNjb3BlR1BSLCByZWdU
Myk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOwotCi0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAo
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6
Ci0gICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eToKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQot
ICAgIH07Ci0KLSAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyIHx8IHBy
b2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0g
ICAgICAgIGVtaXRDb2RlKHByb2ZpbGVkUmVzb2x2ZVR5cGUpOwotICAgIGVsc2UgewotICAgICAg
ICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29k
ZSwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSwgcmVnVDAp
OwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdU
MCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgbm90R2xvYmFs
VmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcik7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsVmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVt
cCBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAg
ICBlbWl0Q29kZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0
aW9uLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNo
MzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAg
SnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSk7Ci0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1p
dENvZGUoR2xvYmFsUHJvcGVydHkpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsK
LQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2Rl
KEdsb2JhbExleGljYWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0g
ICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAg
ICB9Ci0KLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZSk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0KLSAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7
Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRGcm9t
U2NvcGUsIGRzdCwgYXJndW1lbnRHUFIwLCBpbnN0cnVjdGlvbik7Ci19Ci0KLSNlbHNlCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0RnJvbVNjb3BlPigpOwpAQCAtMjUwMiwxMSArMjIzMywxMSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogCiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q0OwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVj
b2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IHJlZ1QzOwogCiAgICAgdWludDMyX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2Vk
Q29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlclBheWxvYWQoc2NvcGUsIHNjb3BlR1BSKTsKICAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKG1ldGFkYXRhT2Zmc2V0KSwgc19tZXRhZGF0YUdQUiwgbWV0YWRhdGFHUFIpOwog
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIp
OwogCkBAIC0yNTI5LDcgKzIyNjAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBjb2RlID0g
dm0uZ2V0Q1RJU3R1YihnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bms8R2xvYmFsVmFyPik7CiAK
ICAgICBlbWl0TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXR1cm5WYWx1ZUpTUik7CiB9CiAKIHRlbXBsYXRlIDxSZXNvbHZlVHlwZSBwcm9m
aWxlZFJlc29sdmVUeXBlPgpAQCAtMjU0Miw2ICsyMjczLDEwIEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0m
IHZtKQogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwogICAg
IGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNDsKICAgICBjb25zdGV4cHIgR1BS
UmVnIHNjb3BlR1BSID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IHJlZ1QzOyAvLyBVc2VkIG9ubHkgb24gc2xvdyBwYXRoCisgICAgY29uc3RleHByIEdQ
UlJlZyBzY3JhdGNoR1BSID0gcmVnVDU7CisgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlT2Zmc2V0
R1BSKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChyZXR1cm5WYWx1ZUpTUiwgbWV0YWRh
dGFHUFIsIHNjb3BlR1BSLCBieXRlY29kZU9mZnNldEdQUiwgc2NyYXRjaEdQUikpOwogCiAgICAg
Q0NhbGxIZWxwZXJzIGppdDsKIApAQCAtMjU1MiwxMCArMjI4NywxMCBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5r
KFZNJiB2bSkKICAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpIHsKICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNr
cykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsK
LSAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xv
YmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9p
bnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwor
ICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHNjcmF0Y2hHUFIpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9i
amVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0
Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQp
KSk7CiAgICAgfTsKICAgICAKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSkgewpAQCAtMjU2MywyOSArMjI5OCwyOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiB2
bSkKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIFN0cnVjdHVyZSBj
aGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVz
IGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZl
X3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFk
YXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgICAgICAgICBqaXQu
bG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QxKTsKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWws
IEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPcEdldEZyb21T
Y29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0cihaZXJvLCBzY3JhdGNoR1BS
KSk7CisgICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJl
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSk7CiAKICAgICAgICAgICAgIGppdC5q
aXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAg
ICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBD
b2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGppdC5icmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCByZWdUMyk7CisgICAgICAg
ICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHNjcmF0
Y2hHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBqaXQuYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgc2Ny
YXRjaEdQUik7CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QxKTsK
KyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpv
ZmZzZXRPZk9wZXJhbmQoKSksIHNjcmF0Y2hHUFIpOwogCiAgICAgICAgICAgICBpZiAoQVNTRVJU
X0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gaml0LmJyYW5j
aDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGlu
ZU9mZnNldCkpOworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBqaXQuYnJhbmNo
MzIoR3JlYXRlclRoYW5PckVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRP
ZkxpbmVPZmZzZXQpKTsKICAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVE9m
ZnNldElzTm90T3V0T2ZMaW5lKTsKICAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKCZq
aXQpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHNj
b3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAg
ICBqaXQubmVnMzIocmVnVDEpOwotICAgICAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKHJl
Z1QxLCByZWdUMSk7Ci0gICAgICAgICAgICBqaXQubG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVn
VDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Moc2Nv
cGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjb3BlR1BSKTsKKyAgICAgICAg
ICAgIGppdC5uZWdQdHIoc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFZhbHVlKEJh
c2VJbmRleChzY29wZUdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmV0dXJuVmFsdWVKU1IpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CkBA
IC0yNTkzLDIwICsyMzI3LDE2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtKQogICAgICAgICBjYXNl
IEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6CiAgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMCk7
Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDApOworICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9m
T3BlcmFuZCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFZhbHVlKEFkZHJl
c3Moc2NyYXRjaEdQUiksIHJldHVyblZhbHVlSlNSKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZl
VHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAg
c2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hJZkVtcHR5KHJldHVyblZhbHVlSlNSKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNl
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICAgICAgZG9WYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgIE1ldGFkYXRhOjpvZmZzZXRP
Zk9wZXJhbmQoKSksIHJlZ1QzKTsKLSAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09
IHNpemVvZihSZWdpc3RlcikpOwotICAgICAgICAgICAgaml0LmxzaGlmdDY0KFRydXN0ZWRJbW0z
MigzKSwgcmVnVDMpOwotICAgICAgICAgICAgaml0LmFkZFB0cihzY29wZUdQUiwgcmVnVDMpOwot
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgSlNMZXhpY2FsRW52aXJvbm1l
bnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZWdUMCk7Ci0KKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsICBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQmFzZUluZGV4KHNjb3BlR1BS
LCBzY3JhdGNoR1BSLCBUaW1lc0VpZ2h0LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZW
YXJpYWJsZXMoKSksIHJldHVyblZhbHVlSlNSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIER5bmFtaWM6CiAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7
CkBAIC0yNjIzLDExICsyMzUzLDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtKQogICAgICAgICBl
bWl0Q29kZShwcm9maWxlZFJlc29sdmVUeXBlKTsKICAgICBlbHNlIHsKICAgICAgICAgSnVtcExp
c3Qgc2tpcFRvRW5kOwotICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1l
dGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSksIHJlZ1QwKTsKLSAgICAgICAgaml0LmFuZDMy
KFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNv
bHZlVHlwZSBpbnRvIFQwCisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
TWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGpp
dC5hbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNoR1BSKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIHNjcmF0Y2hHUFIKIAogICAgICAgICBhdXRvIGVtaXRD
YXNlV2l0aG91dENoZWNrID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewotICAgICAg
ICAgICAgSnVtcCBub3RDYXNlID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBKdW1wIG5vdENhc2UgPSBqaXQuYnJh
bmNoMzIoTm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwog
ICAgICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwogICAgICAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqaXQuanVtcCgpKTsKICAgICAgICAgICAgIG5vdENhc2UubGluaygmaml0KTsKQEAg
LTI2NjEsOCArMjM5MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtKQogICAgIH0KIAogICAgIHN0
YXRpY19hc3NlcnQoVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgPT0gMSk7Ci0gICAgaml0
LnN0b3JlNjQocmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlBy
b2ZpbGUoKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7Ci0KKyAgICBq
aXQuc3RvcmVWYWx1ZShyZXR1cm5WYWx1ZUpTUiwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRh
dGE6Om9mZnNldE9mUHJvZmlsZSgpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0
KCkpKTsKICAgICBqaXQucmV0KCk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwg
R0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CkBAIC0yNjgwLDQ5
ICsyNDA5LDY2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpz
bG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJiB2CiAKICNpZiBDUFUoWDg2XzY0KQog
ICAgIGppdC5wdXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKLSNlbGlmIENQVShBUk02NCkKKyNlbGlm
IENQVShBUk02NCkgfHwgQ1BVKEFSTV9USFVNQjIpCiAgICAgaml0LnB1c2hQYWlyKGZyYW1lUG9p
bnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOworI2VsaWYgQ1BVKE1JUFMpCisgICAgaml0LnB1
c2hQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBNSVBTUmVnaXN0ZXJzOjpyYSk7CisjZWxzZQor
IyAgIGVycm9yICJOb3QgaW1wbGVtZW50ZWQgb24gcGxhdGZvcm0iCiAjZW5kaWYKIAogICAgIHVz
aW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGluY29taW5n
Qnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGluY29taW5n
Qnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUMzsKICAgICBqaXQuc3RvcmUzMihpbmNvbWluZ0J5dGVj
b2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMpKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgY29kZUJsb2NrR1BSID0gYXJndW1lbnRH
UFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgaW5zdHJ1Y3Rpb25HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgc3RhdGljX2Fzc2Vy
dChpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSICE9IGNvZGVCbG9ja0dQUik7Ci0gICAgc3RhdGlj
X2Fzc2VydChpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSICE9IGdsb2JhbE9iamVjdEdQUik7Ci0g
ICAgc3RhdGljX2Fzc2VydChpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSICE9IGluc3RydWN0aW9u
R1BSKTsKLSAgICBzdGF0aWNfYXNzZXJ0KG1ldGFkYXRhR1BSICE9IGNvZGVCbG9ja0dQUik7Ci0g
ICAgc3RhdGljX2Fzc2VydChtZXRhZGF0YUdQUiAhPSBnbG9iYWxPYmplY3RHUFIpOwotICAgIHN0
YXRpY19hc3NlcnQobWV0YWRhdGFHUFIgIT0gaW5zdHJ1Y3Rpb25HUFIpOworICAgIHN0YXRpY19h
c3NlcnQobm9PdmVybGFwKG1ldGFkYXRhR1BSLCBpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSLCBz
Y3JhdGNoR1BSLCBnbG9iYWxPYmplY3RHUFIsIGluc3RydWN0aW9uR1BSKSk7CiAKLSAgICBqaXQu
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGNvZGVCbG9ja0dQ
Uik7Ci0gICAgaml0LmxvYWRQdHIoQWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zm
c2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQ
b2ludGVyKCkpLCBpbnN0cnVjdGlvbkdQUik7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBzY3JhdGNoR1BSKTsKKyAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKHNjcmF0Y2hHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGds
b2JhbE9iamVjdEdQUik7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBDb2Rl
QmxvY2s6Om9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgaW5zdHJ1Y3Rpb25HUFIp
OwogICAgIGppdC5hZGRQdHIoaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiwgaW5zdHJ1Y3Rpb25H
UFIpOwogCi0gICAgQVNTRVJUKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkuY29u
dGFpbnMoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpKTsKLSAgICBqaXQubW92ZShtZXRhZGF0
YUdQUiwgR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpOyAvLyBQcmVzZXJ2ZSBtZXRhZGF0YSBp
biBhIGNhbGxlZSBzYXZlZCByZWdpc3Rlci4KKyAgICAvLyBQcmVzZXJ2ZSBtZXRhZGF0YSBpbiBh
IGNhbGxlZSBzYXZlZCByZWdpc3Rlci4KKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGNvbnN0ZXhw
ciBHUFJSZWcgbWV0YWRhdGFDU1IgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKKyAgICBh
dXRvIHJlc3RvcmVIaWphY2tlZENTUiA9IFsmXSgpIHsKKyAgICAgICAgaml0Lm1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyksIEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKTsK
KyAgICB9OworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1l
dGFkYXRhQ1NSID0gc19tZXRhZGF0YUdQUjsKKyAgICBhdXRvIHJlc3RvcmVIaWphY2tlZENTUiA9
IFsmXSgpIHsKKyAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCBzX21ldGFkYXRhR1BSKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhz
X21ldGFkYXRhR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgc19tZXRh
ZGF0YUdQUik7CisgICAgfTsKKyNlbmRpZgorICAgIEFTU0VSVChSZWdpc3RlclNldDo6Y2FsbGVl
U2F2ZVJlZ2lzdGVycygpLmNvbnRhaW5zKG1ldGFkYXRhQ1NSKSk7CisgICAgaml0Lm1vdmUobWV0
YWRhdGFHUFIsIG1ldGFkYXRhQ1NSKTsKKwogICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlw
ZShvcGVyYXRpb25HZXRGcm9tU2NvcGUpPihnbG9iYWxPYmplY3RHUFIsIGluc3RydWN0aW9uR1BS
KTsKICAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwogICAgIENhbGwgb3BlcmF0aW9u
ID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0g
aml0LmVtaXROb25QYXRjaGFibGVFeGNlcHRpb25DaGVjayh2bSk7CiAKLSAgICBqaXQuc3RvcmU2
NChyZWdUMCwgQWRkcmVzcyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgTWV0YWRhdGE6Om9m
ZnNldE9mUHJvZmlsZSgpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsK
LSAgICBqaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgR1BSSW5mbzo6
bnVtYmVyVGFnUmVnaXN0ZXIpOworICAgIGppdC5zdG9yZVZhbHVlKHJldHVyblZhbHVlSlNSLCBB
ZGRyZXNzKG1ldGFkYXRhQ1NSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVBy
b2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOworICAgIHJlc3RvcmVIaWphY2tlZENTUigp
OwogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucG9wKFg4NlJlZ2lzdGVyczo6ZWJwKTsKLSNl
bGlmIENQVShBUk02NCkKKyNlbGlmIENQVShBUk02NCkgfHwgQ1BVKEFSTV9USFVNQjIpCiAgICAg
aml0LnBvcFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisjZWxpZiBD
UFUoTUlQUykKKyAgICBqaXQucG9wUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgTUlQU1JlZ2lz
dGVyczo6cmEpOworI2Vsc2UKKyMgICBlcnJvciAiTm90IGltcGxlbWVudGVkIG9uIHBsYXRmb3Jt
IgogI2VuZGlmCiAgICAgaml0LnJldCgpOwogCiAgICAgZXhjZXB0aW9uQ2hlY2subGluaygmaml0
KTsKLSAgICBqaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgR1BSSW5m
bzo6bnVtYmVyVGFnUmVnaXN0ZXIpOworICAgIHJlc3RvcmVIaWphY2tlZENTUigpOwogICAgIEp1
bXAganVtcFRvSGFuZGxlciA9IGppdC5qdW1wKCk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRo
dW5rKTsKQEAgLTI3MzEsNyArMjQ3Nyw2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSklUOjpzbG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJiB2CiAgICAg
cGF0Y2hCdWZmZXIubGluayhqdW1wVG9IYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVy
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBh
dGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBzbG93X29wX2dldF9mcm9tX3Nj
b3BlIik7CiB9Ci0jZW5kaWYgLy8gIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKQEAgLTI3NDcsMjMgKzI0OTIsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGNh
c2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAv
LyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2Fj
aGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuCiAgICAgICAg
ICAgICAvLyBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3Ig
dGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgpLCByZWdUMSk7
Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgICAg
ICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVnVDEpOwotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAg
ICAgICAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgdmFsdWVKU1IgPSBqc1JlZ1QxMDsKKyAgICAg
ICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMjsKKyAgICAgICAgICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUjEgPSByZWdUMzsKKyAgICAgICAgICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaEdQUjIgPSByZWdUNDsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQo
bm9PdmVybGFwKHZhbHVlSlNSLCBzY29wZUdQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyKSk7
CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChzY29wZSwgc2NvcGVHUFIpOworICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCBzY3JhdGNoR1BSMSkpOworICAg
ICAgICAgICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaEdQUjEsIFN0cnVjdHVyZTo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKE5vdEVxdWFsLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCBzY3JhdGNoR1BSMSkpOwogCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMik7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCB2YWx1ZUpTUik7CiAKICAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2
b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDMpOwotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBy
ZWdUMyk7CisgICAgICAgICAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSMik7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIHNjcmF0Y2hH
UFIyKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgICAgICAgICBs
b2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZk9wZXJhbmQoKSwgcmVnVDEpOwotICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAg
ICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QxLCBUaW1lc0VpZ2h0
LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsK
KyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHNj
cmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIG5lZ1B0cihzY3JhdGNoR1BSMSk7CisgICAgICAgICAg
ICBzdG9yZVZhbHVlKHZhbHVlSlNSLCBCYXNlSW5kZXgoc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIx
LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpKTsKICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBT
aG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjc3
MSwyMiArMjUyMSwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAg
ICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29s
dmVUeXBlLCByZWdUMCk7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChqc1Jl
Z1QxMCwgcmVnVDIsIHJlZ1QzKSk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMik7CisgICAgICAgICAg
ICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSwgcmVnVDIpOwogCi0gICAgICAgICAg
ICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDApOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJl
Z1QyKTsKIAogICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGJ5dGVjb2RlLm1fZ2V0
UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExl
eGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVj
ayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFog
Y2hlY2tzIHN0YXRpY2FsbHkuCi0gICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
KSwgcmVnVDEpOwotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVn
VDEpKTsKKyAgICAgICAgICAgICAgICBsb2FkVmFsdWUoQWRkcmVzcyhyZWdUMiksIGpzUmVnVDEw
KTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KGpzUmVnVDEwKSk7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdU
MSk7Ci0gICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QxKTsKKyAgICAg
ICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRh
dGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMyk7CisgICAgICAgICAgICBlbWl0Tm90
aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QzKTsKIAotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQWRkcmVz
cyhyZWdUMCkpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwganNS
ZWdUMTApOworICAgICAgICAgICAgc3RvcmVWYWx1ZShqc1JlZ1QxMCwgQWRkcmVzcyhyZWdUMikp
OwogCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yNzk0LDE0ICsyNTQ1LDE1IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChu
b092ZXJsYXAoanNSZWdUMTAsIHJlZ1QyLCByZWdUMykpOworICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDMp
OwogCi0gICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2Nv
cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDApOworICAgICAgICAg
ICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QzKTsKICAgICAgICAgICAgIGxvYWRQdHJGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFu
ZCgpLCByZWdUMik7Ci0gICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1Qw
KTsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICAgICAg
ICAgIHN0b3JlNjQocmVnVDEsIEJhc2VJbmRleChyZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQsIEpT
TGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSk7CisgICAgICAgICAgICBl
bWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QzKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIGpzUmVnVDEwKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJQYXlsb2FkKHNjb3BlLCByZWdUMyk7CisgICAgICAgICAgICBzdG9yZVZhbHVlKGpz
UmVnVDEwLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBKU0xleGljYWxFbnZp
cm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSkpOwogCiAgICAgICAgICAgICBlbWl0V3JpdGVC
YXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJl
YWs7CkBAIC0yOTQ4LDEwICsyNzAwLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2Fy
Z3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1
YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5k
ZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YXJndW1lbnRzLCByZWdUMCk7Ci0gICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3Vt
ZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdU
MCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJQYXlsb2FkKGFyZ3VtZW50cywgcmVnVDApOworICAgIGxvYWRWYWx1ZShBZGRyZXNz
KHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPikpLCBqc1JlZ1QxMCk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI5NjAsNTEgKzI3MTIs
MTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBi
eXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Owog
ICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhy
ZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChy
ZWdUMiwganNSZWdUMTApKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChhcmd1
bWVudHMsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBqc1JlZ1Qx
MCk7CisgICAgc3RvcmVWYWx1ZShqc1JlZ1QxMCwgQWRkcmVzcyhyZWdUMiwgRGlyZWN0QXJndW1l
bnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pKSk7CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lz
dGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkK
LXsKLSAgICAvLyB2YWx1ZSBtYXkgYmUgaW52YWxpZCBWaXJ0dWFsUmVnaXN0ZXIgaWYgbW9kZSBp
cyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIG9yIFNob3VsZEZpbHRlckJhc2UuCi0gICAgSnVt
cCB2YWx1ZU5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9k
ZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5v
dENlbGwocmVnVDApOwotICAgIH0KLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93
bmVyLCByZWdUMCk7Ci0gICAgSnVtcCBvd25lck5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hv
dWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKLSAgICAg
ICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgb3du
ZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgcmVnVDAsIHJlZ1Qx
KTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25Xcml0ZUJhcnJp
ZXJTbG93UGF0aCwgJnZtKCksIHJlZ1QwKTsKLSAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVu
LmxpbmsodGhpcyk7Ci0KLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUg
fHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQotICAgICAgICBvd25lck5vdENlbGwubGluayh0
aGlzKTsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3Vs
ZEZpbHRlckJhc2VBbmRWYWx1ZSkgCi0gICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwot
fQotCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKLXsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCB2YWx1ZU5vdENlbGw7Ci0gICAgaWYg
KG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpCi0gICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7Ci0KLSAgICBlbWl0V3JpdGVCYXJyaWVyKG93bmVyKTsKLQotICAg
IGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSAKLSAgICAgICAgdmFsdWVOb3RDZWxsLmxp
bmsodGhpcyk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKQEAgLTMwMTIs
MTEgKzI3MjgsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2lu
ZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9m
SW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
clBheWxvYWQoYmFzZSwgcmVnVDApOworICAgIGxvYWRWYWx1ZShBZGRyZXNzKHJlZ1QwLCBKU0lu
dGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCBq
c1JlZ1QxMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwganNSZWdUMTApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTMwMjYsMTIgKzI3NDIs
MTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3Mo
cmVnVDAsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxk
KGluZGV4KSkpOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKHJlZ1QyLCBqc1JlZ1QxMCkp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJhc2UsIHJlZ1QyKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBqc1JlZ1QxMCk7CisgICAgc3RvcmVWYWx1ZShq
c1JlZ1QxMCwgQWRkcmVzcyhyZWdUMiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZz
ZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSk7CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2
YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKwogdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKTsKQEAgLTMyNjgsMTggKzI5ODcs
OTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3QKICAgICBlbWl0X2VudW1lcmF0b3JfaGFzX3By
b3BlcnR5SW1wbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BF
bnVtZXJhdG9ySGFzT3duUHJvcGVydHk+KCksIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2hhc19vd25f
cHJvcGVydHkpOwogfQogCi0jZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQorI2VsaWYgVVNFKEpTVkFM
VUUzMl82NCkKKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENh
bGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2dldF9w
cm9wZXJ0eV9lbnVtZXJhdG9yKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudW1lcmF0b3JfbmV4dCk7CisgICAgc2xvd1Bh
dGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xv
d1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0
aF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJikKK3sKKyAgICBVTlJFQUNI
QUJMRV9GT1JfUExBVEZPUk0oKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9p
bl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBK
SVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xv
d19wYXRoX2VudW1lcmF0b3JfaW5fYnlfdmFsKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOwor
fQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwg
c2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudW1lcmF0
b3JfaGFzX293bl9wcm9wZXJ0eSk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKworI2Vu
ZGlmCisKKyNpZiBVU0UoSlNWQUxVRTY0KQogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihW
aXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVy
TW9kZSBtb2RlKQogewogICAgIC8vIHZhbHVlIG1heSBiZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3Rl
ciBpZiBtb2RlIGlzIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFz
ZS4KICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJW
YWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewotICAgICAgICBlbWl0
TG9hZFRhZyh2YWx1ZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7CiAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7CiAgICAgfQotICAgIAotICAgIGVtaXRMb2FkKG93bmVyLCByZWdUMCwgcmVnVDEpOworCisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVnVDApOworICAgIEp1bXAgb3duZXJO
b3RDZWxsOworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2Rl
ID09IFNob3VsZEZpbHRlckJhc2UpCisgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMCk7CisKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJy
aWVyQnJhbmNoKHZtKCksIHJlZ1QwLCByZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCByZWdUMCk7Cisg
ICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOworCisgICAgaWYgKG1vZGUg
PT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkK
KyAgICAgICAgb3duZXJOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxk
RmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpCisgICAgICAg
IHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOworfQorCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmll
cihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUg
bW9kZSkKK3sKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAg
SnVtcCB2YWx1ZU5vdENlbGw7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpCisg
ICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICBlbWl0
V3JpdGVCYXJyaWVyKG93bmVyKTsKKworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVl
KQorICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKK30KKworI2VsaWYgVVNFKEpTVkFM
VUUzMl82NCkKKwordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93
bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKK3sKKyAg
ICAvLyB2YWx1ZSBtYXkgYmUgaW52YWxpZCBWaXJ0dWFsUmVnaXN0ZXIgaWYgbW9kZSBpcyBVbmNv
bmRpdGlvbmFsV3JpdGVCYXJyaWVyIG9yIFNob3VsZEZpbHRlckJhc2UuCisgICAgSnVtcCB2YWx1
ZU5vdENlbGw7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBT
aG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
clRhZyh2YWx1ZSwgcmVnVDApOworICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOworICAgIH0KKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJl
Z1QwLCByZWdUMSk7CiAgICAgSnVtcCBvd25lck5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hv
dWxkRmlsdGVyQmFzZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkKICAgICAg
ICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKQEAgLTMyOTAsNyArMzA4
Nyw3IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhCiAKICAgICBpZiAobW9kZSA9PSBTaG91bGRG
aWx0ZXJCYXNlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKQogICAgICAgICBv
d25lck5vdENlbGwubGluayh0aGlzKTsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1
ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgCisgICAgaWYgKG1vZGUgPT0g
U2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpCiAg
ICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQogCkBAIC0zMjk4LDE3ICszMDk1LDE3
IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kCiB7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAg
ICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIHsKLSAgICAgICAgZW1pdExvYWRUYWco
dmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyh2YWx1ZSwg
cmVnVDApOwogICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwog
ICAgIH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIob3duZXIpOwogCi0gICAgaWYgKG1vZGUgPT0g
U2hvdWxkRmlsdGVyVmFsdWUpIAorICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKQog
ICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0KIAotI2VuZGlmIC8vIFVTRShKU1ZB
TFVFNjQpCisjZW5kaWYKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lz
dGVyIG93bmVyLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYzYwYjYzMmU5NGQxZGVmMmY0MjMwZjBhODRiZTgzNmNmZDczNTJh
MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsNjQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoSklUKQot
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0jaW5jbHVkZSAiSklULmgiCi0KLSNpbmNsdWRlICJDYWNo
ZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1
ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgotI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5o
IgotI2luY2x1ZGUgIkludGVycHJldGVySW5saW5lcy5oIgotI2luY2x1ZGUgIkpJVElubGluZXMu
aCIKLSNpbmNsdWRlICJKU0FycmF5LmgiCi0jaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgotI2luY2x1
ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCi0jaW5jbHVkZSAiSlNQcm9taXNlLmgiCi0jaW5j
bHVkZSAiTGlua0J1ZmZlci5oIgotI2luY2x1ZGUgIk9wY29kZUlubGluZXMuaCIKLSNpbmNsdWRl
ICJSZXN1bHRUeXBlLmgiCi0jaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCi0jaW5jbHVkZSAiU3Ry
dWN0dXJlU3R1YkluZm8uaCIKLSNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KLQot
Ci1uYW1lc3BhY2UgSlNDIHsKLSAgICAKLXZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlf
aWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgaW50IHByb3BlcnR5
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBpbnQgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZ2V0dGVyID0gYnl0ZWNvZGUubV9hY2Nlc3Nv
cjsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMSk7Ci0gICAgZW1pdExvYWRQYXls
b2FkKGdldHRlciwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
QnlJZCwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1Qz
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5OwotICAgIGludCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIFZp
cnR1YWxSZWdpc3RlciBzZXR0ZXIgPSBieXRlY29kZS5tX2FjY2Vzc29yOwotCi0gICAgZW1pdExv
YWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0TG9hZFBheWxvYWQoc2V0dGVyLCByZWdU
Myk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBtX3Byb2ZpbGVk
Q29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmlk
ZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDMpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0R2V0dGVyU2V0dGVyQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3Bl
cnR5OwotICAgIGludCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIFZp
cnR1YWxSZWdpc3RlciBnZXR0ZXIgPSBieXRlY29kZS5tX2dldHRlcjsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc2V0dGVyID0gYnl0ZWNvZGUubV9zZXR0ZXI7Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQo
YmFzZSwgcmVnVDEpOwotICAgIGVtaXRMb2FkUGF5bG9hZChnZXR0ZXIsIHJlZ1QzKTsKLSAgICBl
bWl0TG9hZFBheWxvYWQoc2V0dGVyLCByZWdUNCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJTZXR0ZXIsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBy
ZWdUMSwgbV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBh
dHRyaWJ1dGVzLCByZWdUMywgcmVnVDQpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0
dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBpbnQzMl90
IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGdldHRlciA9IGJ5dGVjb2RlLm1fYWNjZXNzb3I7Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQoYmFz
ZSwgcmVnVDIpOwotICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMSwgcmVnVDApOwotICAgIGVt
aXRMb2FkUGF5bG9hZChnZXR0ZXIsIHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dEdldHRlckJ5VmFsLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVn
VDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIGF0dHJpYnV0ZXMsIHJlZ1QzKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dFNldHRlckJ5VmFsPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzZXR0ZXIgPSBieXRlY29kZS5tX2FjY2Vzc29yOwot
Ci0gICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QyKTsKLSAgICBlbWl0TG9hZChwcm9wZXJ0
eSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZFBheWxvYWQoc2V0dGVyLCByZWdUMyk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgbV9wcm9maWxlZENvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBh
dHRyaWJ1dGVzLCByZWdUMyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmly
dHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKLXsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHJlZ1QwKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDEpOwotICAgIGVtaXRMb2FkUGF5bG9hZChzY29wZSwg
cmVnVDApOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQotICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDAp
OwotICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
LXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVT
Y29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRDb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKLSAgICB1bnNpZ25l
ZCBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRoOwotCi0gICAgYXV0byBlbWl0Q29k
ZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgc3dpdGNoIChyZXNv
bHZlVHlwZSkgewotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgICAgICBjYXNlIEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29w
ZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVz
b2x2ZVR5cGUsIG1fcHJvZmlsZWRDb2RlQmxvY2spOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBs
b2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVnVDEpOwotICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyht
X3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNh
bEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpLCByZWdUMSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJl
Z1QxLCByZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNh
c2UgR2xvYmFsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IAotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUq
IGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29s
dmVUeXBlLCBtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwotICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QxKTsKLSAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1p
dFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShkc3QsIHNj
b3BlLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZWdUMSk7Ci0gICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdU
MCk7Ci0gICAgICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1
cmVWYXI6Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgICAgICBjYXNlIFVu
cmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfTsKLSAgICBzd2l0Y2gg
KHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lw
VG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOwot
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZl
VHlwZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBub3RH
bG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRo
aXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6
Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0g
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jl
c29sdmVUeXBlLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0g
ICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotCi0gICAg
ICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5v
dEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBK
dW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEds
b2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAg
IGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVj
ayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCi17Ci0g
ICAgZW1pdExvYWQoc2NvcGUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgbG9hZFB0cihzdHJ1Y3R1cmVT
bG90LCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOwotfQotCi12b2lk
IEpJVDo6ZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyB0YWcs
IEdQUlJlZyBwYXlsb2FkKQotewotICAgIHVpbnRwdHJfdCByYXdBZGRyZXNzID0gYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4ob3BlcmFuZCk7Ci0gICAgbG9hZDMyKGJpdHdpc2VfY2FzdDx2b2lkKj4o
cmF3QWRkcmVzcyArIFRhZ09mZnNldCksIHRhZyk7Ci0gICAgbG9hZDMyKGJpdHdpc2VfY2FzdDx2
b2lkKj4ocmF3QWRkcmVzcyArIFBheWxvYWRPZmZzZXQpLCBwYXlsb2FkKTsKLX0KLXZvaWQgSklU
OjplbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVn
IHRhZywgR1BSUmVnIHBheWxvYWQpCi17Ci0gICAgbG9hZFB0cihvcGVyYW5kLCBwYXlsb2FkKTsK
LSAgICBsb2FkMzIoQWRkcmVzcyhwYXlsb2FkLCBUYWdPZmZzZXQpLCB0YWcpOwotICAgIGxvYWQz
MihBZGRyZXNzKHBheWxvYWQsIFBheWxvYWRPZmZzZXQpLCBwYXlsb2FkKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9w
ZXJhbmQpCi17Ci0gICAgZW1pdExvYWQoc2NvcGUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgbG9hZDMy
KEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygp
ICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikgKyBUYWdPZmZzZXQpLCByZWdUMSk7Ci0gICAg
bG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlh
YmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KSwgcmVn
VDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5
dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5t
X2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90
ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNs
b3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwot
ICAgIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBi
b29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKLSAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlw
ZSkgewotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgICAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRo
U3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sg
Y292ZXJzIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBHUFJSZWcgYmFzZSA9IHJlZ1QyOwot
ICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFRhZyA9IHJlZ1QxOwotICAgICAgICAgICAgR1BSUmVn
IHJlc3VsdFBheWxvYWQgPSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyBvZmZzZXQgPSByZWdU
MzsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbW92ZShyZWdUMCwgYmFzZSk7Ci0gICAgICAg
ICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoQVNTRVJU
X0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIo
R3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9m
ZnNldCkpOwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91
dE9mTGluZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpLCBiYXNlKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0gICAg
ICAgICAgICBsb2FkMzIoQmFzZUluZGV4KGJhc2UsIG9mZnNldCwgVGltZXNFaWdodCwgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpICsgKGZpcnN0T3V0T2ZMaW5lT2Zm
c2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0UGF5bG9hZCk7Ci0gICAg
ICAgICAgICBsb2FkMzIoQmFzZUluZGV4KGJhc2UsIG9mZnNldCwgVGltZXNFaWdodCwgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykgKyAoZmlyc3RPdXRPZkxpbmVPZmZzZXQg
LSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHRUYWcpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHbG9iYWxWYXI6Ci0gICAgICAgIGNhc2Ug
R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhp
Y2FsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50
ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMSwgcmVnVDApOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QxLCByZWdUMCk7Ci0gICAg
ICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlw
ZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNr
LgotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2Ug
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7
Ci0gICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90KTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRT
bG93Q2FzZShqdW1wKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTW9kdWxl
VmFyOgotICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBVbnJl
c29sdmVkUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNh
c2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1t
MzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50
byBUMAotCi0gICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2Rl
KHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
LQotICAgICAgICBpc05vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRD
b2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAg
ICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVU
eXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1w
IG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3Mp
KTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29k
ZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlz
KTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRD
b2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsK
LQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5r
KHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBl
bWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9w
ZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxW
YXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqIHNldCkKLXsKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBl
bWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICB1aW50cHRyX3QgcmF3QWRkcmVzcyA9IGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KG9wZXJhbmQpOwotICAgIHN0b3JlMzIocmVnVDEsIGJpdHdpc2VfY2Fz
dDx2b2lkKj4ocmF3QWRkcmVzcyArIFRhZ09mZnNldCkpOwotICAgIHN0b3JlMzIocmVnVDAsIGJp
dHdpc2VfY2FzdDx2b2lkKj4ocmF3QWRkcmVzcyArIFBheWxvYWRPZmZzZXQpKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZP
cGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdh
dGNocG9pbnRTZXQpCi17Ci0gICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAg
bG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QyKTsKLSAgICBlbWl0Tm90aWZ5V3Jp
dGUoKmluZGlyZWN0V2F0Y2hwb2ludFNldCk7IC8vIEZJWE1FOiA/PwotICAgIGxvYWRQdHIoYWRk
cmVzc09mT3BlcmFuZCwgcmVnVDIpOwotICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDIs
IFRhZ09mZnNldCkpOwotICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDIsIFBheWxvYWRP
ZmZzZXQpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hw
b2ludFNldCogc2V0KQotewotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMywgcmVnVDIpOwotICAg
IGVtaXRMb2FkKHNjb3BlLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQp
OwotICAgIHN0b3JlMzIocmVnVDMsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50
OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikgKyBUYWdP
ZmZzZXQpKTsKLSAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZp
cm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIp
ICsgUGF5bG9hZE9mZnNldCkpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZv
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvOwot
ICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwot
ICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90
KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7Ci0gICAgCi0gICAgYXV0byBlbWl0Q29kZSA9IFsm
XSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkg
ewotICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgICAgICAgICAgZW1p
dExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1
cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBlbWl0TG9hZCh2YWx1
ZSwgcmVnVDMsIHJlZ1QyKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAg
ICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7Ci0gICAgICAgICAgICBuZWdQdHIocmVn
VDEpOwotICAgICAgICAgICAgc3RvcmUzMihyZWdUMywgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwg
VGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50
YWcpKSk7Ci0gICAgICAgICAgICBzdG9yZTMyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1Qx
LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnBheWxvYWQpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IEdsb2JhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNv
bnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVU
eXBlLCBtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNv
bnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3Bl
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwotICAg
ICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUsIHJlZ1QwKTsKLSAgICAg
ICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9k
ZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9
PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKLSAgICAgICAgICAg
ICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBh
bHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBjaGVja3Mgc3RhdGljYWxseS4KLSAgICAg
ICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICAg
ICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4o
b3BlcmFuZFNsb3QpLCByZWdUMSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kj4oKm9wZXJhbmRTbG90KSwgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QxKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFs
VmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZh
bHVlLCAmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigq
b3BlcmFuZFNsb3QpLCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgot
ICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1
ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwotICAgICAgICAg
ICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRh
Lm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNb2R1
bGVWYXI6Ci0gICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1
bXAoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHk6Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0K
LSAgICB9OwotCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
LSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1f
Z2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5m
bzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAg
ICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0g
YnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mg
OiBHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8vIER5
bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBhbHJl
YWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCi0KLSAgICAgICAgaXNHbG9iYWxMZXhpY2Fs
VmFyLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDog
R2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKLQotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRD
b2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAg
Y2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAg
IEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dElu
Zm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVC
aXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1w
IGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0
eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwot
ICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUp
OwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExl
eGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRD
b2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCkpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2Up
OwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRf
dG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRU
b1Njb3BlPigpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Ci0gICAg
aWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewotICAgICAgICBKSVRTbG93UGF0aENhbGwg
c2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3Rocm93X3N0
cmljdF9tb2RlX3JlYWRvbmx5X3Byb3BlcnR5X3dyaXRlX2Vycm9yKTsKLSAgICAgICAgc2xvd1Bh
dGhDYWxsLmNhbGwoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRUb1Njb3BlLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVu
dEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpOwotICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7Ci0gICAgaW50IGluZGV4ID0gYnl0
ZWNvZGUubV9pbmRleDsKLQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOwotICAgIAotICAgIGVtaXRMb2FkUGF5bG9hZChhcmd1bWVudHMsIHJl
Z1QwKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdl
T2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgVGFnT2Zm
c2V0KSwgcmVzdWx0UmVncy50YWdHUFIoKSk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIERp
cmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJy
aWVyPFVua25vd24+KSArIFBheWxvYWRPZmZzZXQpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7Ci0gICAg
ZW1pdFN0b3JlKGRzdCwgcmVzdWx0UmVncy50YWdHUFIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BS
KCkpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb0FyZ3VtZW50cz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7Ci0gICAgaW50IGluZGV4ID0gYnl0
ZWNvZGUubV9pbmRleDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOwotICAgIAotICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxk
RmlsdGVyVmFsdWUpOwotICAgIAotICAgIGVtaXRMb2FkUGF5bG9hZChhcmd1bWVudHMsIHJlZ1Qw
KTsKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QyKTsKLSAgICBzdG9yZTMyKHJlZ1Qx
LCBBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4
ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBUYWdPZmZzZXQpKTsKLSAgICBzdG9y
ZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQo
KSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBQYXlsb2FkT2Zmc2V0
KSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Owot
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7
Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNz
KHJlZ1QyLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVs
ZChpbmRleCkgKyBUYWdPZmZzZXQpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKLSAgICBsb2FkMzIo
QWRkcmVzcyhyZWdUMiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVy
bmFsRmllbGQoaW5kZXgpICsgUGF5bG9hZE9mZnNldCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigp
KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKLSAg
ICBlbWl0U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRhZ0dQUigpLCByZXN1bHRSZWdzLnBheWxvYWRH
UFIoKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9p
bmRleDsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7Ci0gICAgZW1pdExvYWQo
dmFsdWUsIHJlZ1QxLCByZWdUMik7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMCwg
SlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgp
ICsgVGFnT2Zmc2V0KSk7Ci0gICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgSlNJbnRl
cm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpICsgUGF5
bG9hZE9mZnNldCkpOwotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0
b3IoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBKSVRTbG93
UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRo
X2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRo
aXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudW1lcmF0b3JfbmV4dCk7Ci0gICAg
c2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9n
ZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAg
SklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dfcGF0aF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJikKLXsKLSAgICBV
TlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVy
YXRvcl9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd19wYXRoX2VudW1lcmF0b3JfaW5fYnlfdmFsKTsKLSAgICBzbG93UGF0aENhbGwuY2Fs
bCgpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHko
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBKSVRTbG93UGF0
aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2Vu
dW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQotI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pTSW50ZXJmYWNlSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNl
SklULmgKaW5kZXggN2NhMWI0ZTdjM2ZkMDg0ZGQyN2FjMzg1MDZhYTljNmFlZDk1ZGViMC4uZjE4
NmZiODJiMWZmOTc4ZDhmNjdhNGYwNTMzOGU5Y2ZiNGM4MjM3NCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaApAQCAtMzYsNyArMzYsNyBAQAogI2lmIEVOQUJM
RShKSVQpCiAKIG5hbWVzcGFjZSBKU0MgewotICAgIGNsYXNzIEpTSW50ZXJmYWNlSklUIDogcHVi
bGljIENDYWxsSGVscGVycywgcHVibGljIEdQUkluZm8sIHB1YmxpYyBGUFJJbmZvIHsKKyAgICBj
bGFzcyBKU0ludGVyZmFjZUpJVCA6IHB1YmxpYyBDQ2FsbEhlbHBlcnMsIHB1YmxpYyBHUFJJbmZv
LCBwdWJsaWMgSlNSSW5mbywgcHVibGljIEZQUkluZm8gewogICAgIHB1YmxpYzoKIAogICAgICAg
ICBKU0ludGVyZmFjZUpJVChWTSogdm0gPSBudWxscHRyLCBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IG51bGxwdHIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5j
cHAKaW5kZXggMjk3MTQ3ZTFjNGMwOGRjY2Q1ZjdiNzg2NDExZDg1NWIyYTFkZTQ3Yy4uOGY4ZjYy
YTVmNTYzMzg3OTNjOTQ2N2M5N2VhMzk3MzZjZDg5OTJkYyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcApAQCAtNDEsOCArNDEsNiBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotCiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYg
dm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKQEAgLTYxLDYgKzU5LDggQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0m
IHZtKQogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRh
ZywgImhhbmRsZUV4Y2VwdGlvbiIpOwogfQogCisjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CisKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9u
V2l0aENhbGxGcmFtZVJvbGxiYWNrR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBDQ2FsbEhlbHBl
cnMgaml0OwpAQCAtNzcsMTQgKzc3LDIwIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrR2VuZXJhCiAgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiaGFuZGxl
RXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrIik7CiB9CiAKKyNlbmRpZgorCiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRI
YW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7
CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoMiAqIHNpemVvZihDUFVSZWdpc3RlcikpLCBYODZSZWdpc3RlcnM6OmVzcCk7Ci0jZWxp
ZiBDUFUoQVJNNjQpCisjZWxpZiBDUFUoQVJNNjQpIHx8IENQVShBUk1fVEhVTUIyKQogICAgIGpp
dC5wb3BQYWlyKENDYWxsSGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVy
czo6bGlua1JlZ2lzdGVyKTsKKyNlbGlmIENQVShNSVBTKQorICAgIGppdC5wb3BQYWlyKENDYWxs
SGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIE1JUFNSZWdpc3RlcnM6OnJhKTsKKyNlbHNl
CisjICAgZXJyb3IgIk5vdCBpbXBsZW1lbnRlZCBvbiBwbGF0Zm9ybSIKICNlbmRpZgogCiAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wIGNvbnRpbnVhdGlvbiA9IGppdC5qdW1wKCk7CkBAIC05NSw2ICsx
MDEsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBvcFRodW5rU3Rh
Y2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZQogICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgInBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRI
YW5kbGVFeGNlcHRpb24iKTsKIH0KIAorI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorCiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKFZNJiB2bSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKaW5kZXggMGY5ZjZlMmQzNmY2ZGQyM2UxODcyNmFj
ZTYzMTRhMzBhMjAxZGJjZS4uMjI3OGU4MDRjZTA1NDRhN2JlNWE3OGE3ZTgzZmY1Y2FjZmRkYzdk
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCkBAIC0z
NywxMiArMzcsMTIgQEAgY2xhc3MgVk07CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25H
ZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFu
ZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrR2VuZXJhdG9yKFZNJik7Ci1NYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRI
YW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKIAogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRs
ZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9y
KFZNJik7CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdGhyb3dFeGNl
cHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNJik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443189</attachid>
            <date>2021-11-03 04:51:58 -0700</date>
            <delta_ts>2021-11-04 05:58:47 -0700</delta_ts>
            <desc>v3</desc>
            <filename>bug-232624-20211103115156.patch</filename>
            <type>text/plain</type>
            <size>218901</size>
            <attacher name="Geza Lore">glore</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1MTY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
ZDY2YmExNGFiMjYyODc2MWU2OTA1ZGRlODhjYmUxMjJmOWEyZTdkLi5lYWY4ZjdjNGM1MGI5NmI2
YTkzZGIzZTliMDdkYTFjN2QxYzEwNGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODggQEAKKzIwMjEtMTEtMDIgIEdlemEgTG9yZSAgPGdsb3JlQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0pTQ10gRW5hYmxlIHNoYXJpbmcgb2YgdW5saW5rZWQgYmFzZWxpbmUgY29kZSBv
biBKU1ZBTFVFMzJfNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzMjYyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggY29udGFpbnMgYSBmZXcgZGlmZmVyZW50IGNoYW5nZXMsIHdoaWNo
IHRha2VuIHRvZ2V0aGVyCisgICAgICAgIGVuYWJsZSB0aGUgc2hhcmluZyBvZiB0aGUgdW5saW5r
ZWQgYmFzZWxpbmUgSklUIGNvZGUgYmV0d2VlbiBkaWZmZXJlbnQKKyAgICAgICAgQ29kZUJsb2Nr
cyBvbiBKU1ZBTFVFMzJfNjQgcGxhdGZvcm1zICh0aGUgc2FtZSB3YXkgYXMgdGhpcyBjb2RlIGlz
CisgICAgICAgIHNoYXJlZCBvbiBKU1ZBTFVFNjQgcGxhdGZvcm1zKS4KKworICAgICAgICAxLiBB
IGxvdCBvZiBiYXNlbGluZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIG9wY29kZXMgdGhhdCBuZWVk
ZWQKKyAgICAgICAgY2hhbmdpbmcgZm9yIHRoZSB1bmxpbmtlZCBiYXNlbGluZSBhcmUgbm93IHVu
aWZpZWQgYmV0d2VlbiB0aGUKKyAgICAgICAgSlNWQUxVRTY0IGFuZCBKU1ZBTFVFMzJfNjQgcGxh
dGZvcm1zLiBOb3RlIHRoYXQgd2hpbGUgdGhpcyByZXF1aXJlZAorICAgICAgICBhZGRpbmcgc29t
ZSBhYnN0cmFjdGlvbiwgdGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBiYXNlbGluZSBKSVQgc2hv
dWxkCisgICAgICAgIGJlIGlkZW50aWNhbCB1c2luZyB0aGlzIGFic3RyYWN0aW9uIGNvbXBhcmVk
IHRvIGJlZm9yZS4KKworICAgICAgICAyLiBJIGFkZGVkIGEgSlNSSW5mbyBjbGFzcyB3aGljaCBk
ZWZpbmVzIHN0YW5kYXJkIG5hbWVzIGZvciBjZXJ0YWluCisgICAgICAgIEpTVmFsdWVSZWcgaW5z
dGFuY2VzLiBUaGlzIGVuYWJsZXMgYSBsb3Qgb2YgdGhlIHVuaWZpY2F0aW9uIGluIHRoZQorICAg
ICAgICBwb2ludCBhYm92ZSB0byBiZSBhIHNpbXBsZSB0cmFuc2Zvcm1hdGlvbi4gQWdhaW4sIHRo
aXMgc2hvdWxkIGhhdmUgbm8KKyAgICAgICAgaW1wYWN0IG9uIHRoZSBnZW5lcmF0ZWQgY29kZSBv
biBKU1ZBTFVFNjQsIGFwYXJ0IGZyb20gc29tZSByZWdpc3RlcgorICAgICAgICBzdWJzdGl0dXRp
b25zLgorCisgICAgICAgIDMuIFRoZSBzaXplcyBvZiB0aGUgcmVzb2x2ZV9zY29wZSBhbmQgZ2V0
X2Zyb21fc2NvcGUgb3BzIGluY3JlYXNlZAorICAgICAgICBzaWduaWZpY2FudGx5IHdpdGggdGhl
IHVubGlua2VkIGJhc2VsaW5lLiBUaGlzIGNhbiBjYXVzZSBpc3N1ZXMgb24KKyAgICAgICAgc29t
ZSBKU1ZBTFVFMzJfNjQgdGFyZ2V0cyB3aGVyZSBtZW1vcnkgaXMgbW9yZSBwcmVjaW91cywgc28g
Zm9yIHRoZXNlCisgICAgICAgIHR3byBvcHMgSSBzd2FwcGVkIGluIHRoZSBpbXBsZW1lbnRhdGlv
bnMgdW5kZXIgRVhUUkFfQ1RJX1RIVU5LUywgd2hpY2gKKyAgICAgICAgaW1wbGVtZW50IHRoZXNl
IHVzaW5nIHNoYXJlZCBzdHVicy4gVGhlc2Ugc3R1YnMgd29yayBvbiBhbGwgcGxhdGZvcm1zCisg
ICAgICAgIHRoYXQgc3VwcG9ydCBFTkFCTEUoSklUKSwgc28gdGhleSBhcmUgbm93IHRoZSBvbmx5
IGltcGxlbWVudGF0aW9uIGFuZAorICAgICAgICBJIGhhdmUgcmVtb3ZlZCB0aGUgYmFzaWMgYmxv
YXRlZCB2ZXJzaW9ucy4gTm90ZSBwdXRfdG9fc2NvcGUgc3VmZmVycworICAgICAgICBmcm9tIHRo
ZSBzYW1lIGNvZGUgc2l6ZSBpbmNyZWFzZSBidXQgY3VycmVudGx5IGRvZXMgbm90IGhhdmUgYSBz
aGFyZWQKKyAgICAgICAgc3R1YiBiYXNlZCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyBPSyBmb3Ig
bm93IHRvIHBhc3MgdGhlIHRlc3Qgc3VpdGVzCisgICAgICAgIG9uIEpTVkFMVUUzMl82NCwgYnV0
IHByb2JhYmx5IHNob3VsZCBiZSBhZGRyZXNzZWQgbGF0ZXIuCisKKyAgICAgICAgNC4gUmVtb3Zl
ZCBzb21lIHVudXNlZCBjb2RlIGFuZCBmaWVsZHMgSSBkaXNjb3ZlcmVkIHdoaWxlIHdvcmtpbmcg
b24KKyAgICAgICAgdGhpcywgc3RyaWN0bHkgc3BlYWtpbmcgdGhpcyBpcyBub3QgbmVjZXNzYXJ5
IGZvciB0aGUgZnVuY3Rpb25hbAorICAgICAgICBjaGFuZ2UuCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjpzdG9yZVZhbHVlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpp
c051bGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmlzTm90TnVsbCk6CisgICAg
ICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFR1cm5VbmRlZmluZWRJbnRvTnVsbCk6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6bm9PdmVybGFwKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpub092ZXJsYXBJbXBsKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjpub092ZXJsYXBJbXBsUmVnTWFzayk6CisgICAgICAgICogaml0L0dQUkluZm8uaDoK
KyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcyk6CisgICAgICAgIChKU0M6OkpJVDo6bGluayk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycyk6CisgICAgICAgICogaml0L0pJVC5o
OgorICAgICAgICAqIGppdC9KSVRBcml0aG1ldGljLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wSW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJl
VW5zaWduZWRBbmRKdW1wSW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlVW5z
aWduZWRJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX21vZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9j
b21wYXJlVW5zaWduZWRBbmRKdW1wKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVV
bnNpZ25lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3cpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcCk6CisgICAgICAgICogaml0L0pJ
VEFyaXRobWV0aWMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF91bnNpZ25l
ZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbmMpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZGVjKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVTZXR1cEZyYW1l
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgICogaml0L0pJVElubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFudE9wZXJhbmQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0
VmlydHVhbFJlZ2lzdGVyVGFnKToKKyAgICAgICAgKEpTQzo6bG9hZEFkZHJPZkNvZGVCbG9ja0Nv
bnN0YW50QnVmZmVyKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkQ29kZUJsb2NrQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudFBheWxvYWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudFRhZyk6CisgICAgICAgICogaml0
L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbW92KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2VuZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9u
ZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfamZhbHNlKToKKyAgICAgICAgKEpTQzo6SklUOjp2YWx1ZUlzRmFsc2V5R2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2plcV9udWxsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2puZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXFf
cHRyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2plcSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdHJ1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6dmFs
dWVJc1RydXRoeUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXEpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0RXEpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRj
aF9jaGFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9uZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b190aGlzKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmND
b21tb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5j
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2lzX2VtcHR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2Jvb2xlYW4pOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2lzX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX25vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdW5kZWZp
bmVkX29yX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3Jf
bnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXFfcHRyKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Vx
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lcSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9qZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcEVxSnVtcFNsb3cp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcSk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVPcFN0cmljdEVxSnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfanN0
cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX251bWJlcik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF90b19udW1lcmljKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3N0cmlu
Zyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19vYmplY3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9lbnRlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jaGVja190ZHopOgorICAg
ICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wdXRfZ2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9z
ZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0
ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29w
X3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0
X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVU
aHVuayk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3B1dF90b19hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9pbnRl
cm5hbF9maWVsZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcHJvcGVydHlfZW51
bWVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0V3JpdGVCYXJyaWVyKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaml0L0pTSW50ZXJmYWNlSklULmg6Cisg
ICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OnBvcFRodW5r
U3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOgorICAgICAgICAqIGpp
dC9UaHVua0dlbmVyYXRvcnMuaDoKKwogMjAyMS0xMS0wMiAgUGF0cmljayBBbmdsZSAgPHBhbmds
ZUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViRHJpdmVyOiBbQ29jb2FdIHN1cHBvcnQgYGFjY2Vw
dEluc2VjdXJlQ2VydHNgIGNhcGFiaWxpdHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggZWM1NmMxMGVhYTBlNGYwNmEyZTMwZTNhYWI2NDZhMGYwZGJiNjhjOC4uODkwYjUwYzY2Nzhl
NjQ4YTQxMDRiOWQ2ZGUwMjc0ZTRiOTRlZTJkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTQ3NzgsNyArNDc3OCw2IEBACiAJCUE3QkZGM0JGMTc5ODY4OTQwMDAyRjQ2MiAvKiBE
RkdGaWx0cmF0aW9uUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0ZpbHRyYXRpb25SZXN1bHQuaDsgcGF0aCA9IGRmZy9ERkdGaWx0cmF0aW9uUmVzdWx0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QzBDNEFBMTY3QzA4Q0QwMDE3MDExRCAvKiBK
U1NjcmlwdFJlZi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Nj
cmlwdFJlZi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QzBDNEFCMTY3QzA4
Q0QwMDE3MDExRCAvKiBKU1NjcmlwdFJlZlByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNTY3JpcHRSZWZQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUE3QzFFOEM4MTEyRTcwMUMwMEEzN0Y5OCAvKiBKSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0MxRUFFQjE3OTg3
QUI2MDAyOTlEQjIgLyogQ0xvb3BTdGFja0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ0xvb3BTdGFja0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTdDMUVBRUMxNzk4N0FCNjAwMjk5REIyIC8qIFN0YWNrVmlzaXRvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IGxpbmVFbmRpbmcgPSAwOyBwYXRoID0gU3RhY2tWaXNp
dG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdDMUVBRUQxNzk4N0FCNjAw
Mjk5REIyIC8qIFN0YWNrVmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdGFja1Zpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY0MDQsNyAr
NjQwMyw2IEBACiAJCQkJNzI2QjkxQUYyNjU4MTY1MzAwOEU2RjgyIC8qIEpJVFBsYW4uaCAqLywK
IAkJCQk3MjEzMUJGNjI2NTg3RUYyMDA3MTE0Q0YgLyogSklUUGxhblN0YWdlLmggKi8sCiAJCQkJ
ODZDQzg1QzMwRUU3QTg5NDAwMjg4NjgyIC8qIEpJVFByb3BlcnR5QWNjZXNzLmNwcCAqLywKLQkJ
CQlBN0MxRThDODExMkU3MDFDMDBBMzdGOTggLyogSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAg
Ki8sCiAJCQkJRkUzQTA2QjgxQzExMDNEOTAwMzkwRkREIC8qIEpJVFJpZ2h0U2hpZnRHZW5lcmF0
b3IuY3BwICovLAogCQkJCUZFM0EwNkI5MUMxMTAzRDkwMDM5MEZERCAvKiBKSVRSaWdodFNoaWZ0
R2VuZXJhdG9yLmggKi8sCiAJCQkJNzIxMzFCRjMyNjU4N0VGMjAwNzExNENGIC8qIEpJVFNhZmVw
b2ludC5jcHAgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50
eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5kZXggZGQ4Y2I2MjcyNDFi
ZTg4Y2VlZjA3NDU5Yzg1ZWYzYzhhOWY4YzgzNy4uMDUzZjMxY2MyYzk5MTAzOTEyOGRlOGM4NmY3
MjljZDI3ODFjMzVhZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtNjU5LDcgKzY1
OSw2IEBAIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCiBqaXQvSklUT3BlcmF0aW9ucy5jcHAKIGpp
dC9KSVRQbGFuLmNwcAogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAotaml0L0pJVFByb3BlcnR5
QWNjZXNzMzJfNjQuY3BwCiBqaXQvSklUUmlnaHRTaGlmdEdlbmVyYXRvci5jcHAKIGppdC9KSVRT
YWZlcG9pbnQuY3BwCiBqaXQvSklUU2l6ZVN0YXRpc3RpY3MuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCAyNDRmMjIyNzkyYzcwZjgxYWQwNzcx
MDdhMTY2MzMyZGM3MzFlZjBmLi40OWVlZjQ3MGE4YjU1MTJlZTgxNTVmOThhNWY5NDY0OWVlZjJk
NDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAg
LTI3Niw3ICsyNzYsMTcgQEAgcHVibGljOgogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMih2YWx1
ZS5wYXlsb2FkKCkpLCByZWdzLnBheWxvYWRHUFIoKSk7CiAjZW5kaWYKICAgICB9Ci0gICAgCisK
KyAgICB2b2lkIHN0b3JlVmFsdWUoSlNWYWx1ZSB2YWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQorICAg
IHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzdG9yZTY0KEltbTY0KEpTVmFsdWU6OmVu
Y29kZSh2YWx1ZSkpLCBhZGRyZXNzKTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAg
IHN0b3JlMzIoSW1tMzIodmFsdWUudGFnKCkpLCBhZGRyZXNzLndpdGhPZmZzZXQoVGFnT2Zmc2V0
KSk7CisgICAgICAgIHN0b3JlMzIoSW1tMzIodmFsdWUucGF5bG9hZCgpKSwgYWRkcmVzcy53aXRo
T2Zmc2V0KFBheWxvYWRPZmZzZXQpKTsKKyNlbmRpZgorICAgIH0KKwogICAgIHZvaWQgc3RvcmVU
cnVzdGVkVmFsdWUoSlNWYWx1ZSB2YWx1ZSwgQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICNpZiBV
U0UoSlNWQUxVRTY0KQpAQCAtMTA0NSw2ICsxMDU1LDI0IEBAIHB1YmxpYzoKICNlbmRpZgogICAg
IH0KIAorICAgIHZvaWQgaXNOdWxsKEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyBkc3QpCisgICAg
eworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVncy5wYXls
b2FkR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCBkc3QpOworI2VsaWYg
VVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdzLnRhZ0dQUigp
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZyksIGRzdCk7CisjZW5kaWYKKyAgICB9CisK
KyAgICB2b2lkIGlzTm90TnVsbChKU1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgZHN0KQorICAgIHsK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJlZ3MucGF5
bG9hZEdQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgZHN0KTsKKyNlbGlm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVncy50YWdH
UFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpLCBkc3QpOworI2VuZGlmCisgICAg
fQorCiAgICAgSnVtcCBicmFuY2hJZk51bGwoR1BSUmVnIGdwcikKICAgICB7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKQEAgLTExMTQsNiArMTE0MiwxNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBi
cmFuY2hUZXN0UHRyKFplcm8sIHN0cmluZ0ltcGxHUFIsIFRydXN0ZWRJbW0zMihKU1N0cmluZzo6
aXNSb3BlSW5Qb2ludGVyKSk7CiAgICAgfQogCisgICAgdm9pZCBlbWl0VHVyblVuZGVmaW5lZElu
dG9OdWxsKEpTVmFsdWVSZWdzIHJlZ3MpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
ICAgIHN0YXRpY19hc3NlcnQoKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkICYgfkpTVmFsdWU6OlVu
ZGVmaW5lZFRhZykgPT0gSlNWYWx1ZTo6VmFsdWVOdWxsKTsKKyAgICAgICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdzLnBheWxvYWRHUFIoKSk7CisjZWxp
ZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBzdGF0aWNfYXNzZXJ0KChKU1ZhbHVlOjpVbmRl
ZmluZWRUYWcgfCAxKSA9PSBKU1ZhbHVlOjpOdWxsVGFnKTsKKyAgICAgICAgb3IzMihUcnVzdGVk
SW1tMzIoMSksIHJlZ3MudGFnR1BSKCkpOworI2VuZGlmCisgICAgfQorCiAgICAgc3RhdGljIEFk
ZHJlc3MgYWRkcmVzc0ZvckJ5dGVPZmZzZXQocHRyZGlmZl90IGJ5dGVPZmZzZXQpCiAgICAgewog
ICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgYnl0ZU9m
ZnNldCk7CkBAIC0xODQ1LDYgKzE4ODQsNDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHN0
b3JlV2FzbUNvbnRleHRJbnN0YW5jZU5lZWRzTWFjcm9TY3JhdGNoUmVnaXN0ZXIoKTsKICNlbmRp
ZgogCisgICAgLy8gQ2hlY2tzIHRoYXQgdGhlIGdpdmVuIGxpc3Qgb2YgR1BSUmVncyBhbmQgSlNW
YWx1ZVJlZ3MgZG8gbm90IG92ZXJsYXAuIFVzZSB0aGlzIGluIHN0YXRpYworICAgIC8vIGFzc2Vy
dGlvbnMgdG8gZW5zdXJlIHRoYXQgcmVnaXN0ZXIgYWxpYXNlcyBsaXZlIGF0IHRoZSBzYW1lIHBv
aW50IGRvIG5vdCBtYXAgdG8gdGhlIHNhbWUKKyAgICAvLyBhcmNoaXRlY3R1cmFsIHJlZ2lzdGVy
LgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBub092ZXJsYXAoQXJncy4uLiBhcmdzKSB7IHJldHVybiBub092ZXJsYXBJbXBsKDAsIGFy
Z3MuLi4pOyB9CisKK3ByaXZhdGU6CisgICAgLy8gQmFzZSBjYXNlCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lLi4uIEFyZ3M+CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5vT3ZlcmxhcEltcGwo
dWludDY0X3QpIHsgcmV0dXJuIHRydWU7IH0KKworICAgIC8vIEdQUlJlZyBjYXNlCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5vT3Zl
cmxhcEltcGwodWludDY0X3QgdXNlZCwgUmVnaXN0ZXJJRCBncHIsIEFyZ3MuLi4gYXJncykKKyAg
ICB7CisgICAgICAgIHVuc2lnbmVkIG1hc2sgPSBub092ZXJsYXBJbXBsUmVnTWFzayhncHIpOwor
ICAgICAgICBpZiAodXNlZCAmIG1hc2spCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiBub092ZXJsYXBJbXBsKHVzZWQgfCBtYXNrLCBhcmdzLi4uKTsKKyAgICB9CisK
KyAgICAvLyBKU1ZhbHVlUmVncyBjYXNlCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEFyZ3M+
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5vT3ZlcmxhcEltcGwodWludDY0X3QgdXNlZCwg
SlNWYWx1ZVJlZ3MganNyLCBBcmdzLi4uIGFyZ3MpCisgICAgeworICAgICAgICB1bnNpZ25lZCBt
YXNrID0gbm9PdmVybGFwSW1wbFJlZ01hc2soanNyLnBheWxvYWRHUFIoKSk7CisjaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICAgICAgbWFzayB8PSBub092ZXJsYXBJbXBsUmVnTWFzayhqc3IudGFn
R1BSKCkpOworI2VuZGlmCisgICAgICAgIGlmICh1c2VkICYgbWFzaykKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG5vT3ZlcmxhcEltcGwodXNlZCB8IG1hc2ssIGFy
Z3MuLi4pOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbm9PdmVybGFw
SW1wbFJlZ01hc2soUmVnaXN0ZXJJRCBncHIpCisgICAgeworICAgICAgICBpZiAoZ3ByID09IElu
dmFsaWRHUFJSZWcpCisgICAgICAgICAgICByZXR1cm4gMFVMTDsKKyAgICAgICAgdW5zaWduZWQg
Yml0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdwcik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGJpdCA8IHNpemVvZih1aW50NjRfdCkgKiBDSEFSX0JJVCk7CisgICAgICAgIHJldHVybiAxVUxM
IDw8IGJpdDsKKyAgICB9CisKIHByb3RlY3RlZDoKICAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVySW1wbChHUFJSZWcgY2FsbGVlU2F2ZXNCdWZmZXIp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCmluZGV4IGIyMGUzMzFiNTVjZjMyYTEy
OTE3MTkyMDA1M2U4NWM0NGQ1YTEzZDkuLjNmODgzZTVlMTFlNjNjMTY4NGZlZjQ5YWE0M2YyYjYy
MzM0NjM0M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCkBAIC05MjAsMTMgKzky
MCw0MyBAQCBwdWJsaWM6CiAKICNlbmRpZiAvLyBDUFUoUklTQ1Y2NCkKIAorLy8gVG8gbWFrZSBz
b21lIGNvZGUgZ2VuZXJpYyBvdmVyIGJvdGggSlNWQUxVRTY0IGFuZCBKU1ZBTFVFMzJfNjQgcGxh
dGZvcm1zLCB3ZSB1c2Ugc3RhbmRhcmQgbmFtZXMKKy8vIGZvciBjZXJ0YWluIEpTVmFsdWVSZWdz
IGluc3RhbmNlcy4gT24gSlNWQUxVRTY0LCBhIEpTVmFsdWVSZWdzIGNvcnJlc3BvbmRzIHRvIGEg
c2luZ2xlIDY0LWJpdAorLy8gYXJjaGl0ZWN0dXJhbCBHUFIsIHdoaWxlIG9uIEpTVkFMVUUzMl82
NCwgYSBKU1ZhbHVlUmVncyBjb3JyZXNwb25kcyB0byBhIHBhaXIgb2YgMzItYml0CisvLyBhcmNo
aXRlY3R1cmFsIEdQUnMuIE5ldmVydGhlbGVzcywgYSBsb3Qgb2YgdGhlIGRpZmZlcmVuY2UgYmV0
d2VlbiB0aGUgdGFyZ2V0cyBjYW4gYmUgYWJzdHJhY3RlZAorLy8gb3ZlciB1c2luZyB0aGUgZm9s
bG93aW5nIGFsaWFzZXMuIFNlZSBBc3NlbWJseUhlbHBlcjo6bm9PdmVybGFwIGZvciBjYXRjaGlu
ZyBjb25mbGljdGluZyByZWdpc3RlcgorLy8gYWxpYXNpbmcgc3RhdGljYWxseS4KK2NsYXNzIEpT
UkluZm8geworcHVibGljOgorICAgIC8vIFRlbXBvcmFyeSByZWdpc3RlcnMuCisgICAgLy8gT24g
SlNWQUxVRTY0LCBqc1JlZ1R7MipuKzF9ezIqbn0gYWx3YXlzIG1hcHMgb25lLXRvLW9uZSB0byBH
UFIgcmVnVHsyKm59CisgICAgLy8gT24gSlNWQUxVRTMyXzY0LCBqc1JlZ1R7MipuKzF9ezIqbn0g
YWx3YXlzIG1hcHMgdG8gdGhlIEdQUiBwYWlyIHJlZ1R7MipuKzF9IC8gcmVnVHsyKm59CisgICAg
Ly8gVGhpcyBtYXBwaW5nIGlzIGRlbGliZXJhdGVseSBzaW1wbGUgdG8gZWFzZSByZWFzb25pbmcg
YWJvdXQgYWxpYXNpbmcuIEUuZy46CisgICAgLy8gU2VlaW5nICdqc1JlZ1QxMCcgaW5kaWNhdGVz
IHRoYXQgaW4gZ2VuZXJhbCBib3RoICdyZWdUMScgYW5kICdyZWdUMCcgbWF5IGJlIHVzZWQuCisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICBzdGF0aWMgY29uc3RleHByIEpTVmFsdWVSZWdzIGpzUmVn
VDEwIHsgR1BSSW5mbzo6cmVnVDAgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIEpTVmFsdWVSZWdz
IGpzUmVnVDMyIHsgR1BSSW5mbzo6cmVnVDIgfTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBqc1JlZ1QxMCB7IEdQUkluZm86OnJlZ1Qx
LCBHUFJJbmZvOjpyZWdUMCB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MganNS
ZWdUMzIgeyBHUFJJbmZvOjpyZWdUMywgR1BSSW5mbzo6cmVnVDIgfTsKKyNlbmRpZgorCisgICAg
Ly8gUmV0dXJuIHZhbHVlIHJlZ2lzdGVyCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBzdGF0aWMg
Y29uc3RleHByIEpTVmFsdWVSZWdzIHJldHVyblZhbHVlSlNSIHsgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIgfTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgc3RhdGljIGNvbnN0ZXhwciBK
U1ZhbHVlUmVncyByZXR1cm5WYWx1ZUpTUiB7IEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIgfTsKKyNlbmRpZgorfTsKKwogLy8gVGhlIGJhc2VsaW5lIEpJ
VCB1c2VzICJhY2N1bXVsYXRvciIgc3R5bGUgZXhlY3V0aW9uIHdpdGggcmVnVDAgKGZvciA2NC1i
aXQpCiAvLyBhbmQgcmVnVDAgKyByZWdUMSAoZm9yIDMyLWJpdCkgc2VydmluZyBhcyB0aGUgYWNj
dW11bGF0b3IgcmVnaXN0ZXIocykgZm9yCiAvLyBwYXNzaW5nIHJlc3VsdHMgb2Ygb25lIG9wY29k
ZSB0byB0aGUgbmV4dC4gSGVuY2U6Ci1DT01QSUxFX0FTU0VSVChHUFJJbmZvOjpyZWdUMCA9PSBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVnVDBfbXVzdF9lcXVhbF9yZXR1cm5WYWx1ZUdQUik7
CitzdGF0aWNfYXNzZXJ0KEdQUkluZm86OnJlZ1QwID09IEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQotQ09NUElMRV9BU1NFUlQoR1BSSW5mbzo6cmVnVDEg
PT0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCByZWdUMV9tdXN0X2VxdWFsX3JldHVyblZhbHVl
R1BSMik7CitzdGF0aWNfYXNzZXJ0KEdQUkluZm86OnJlZ1QxID09IEdQUkluZm86OnJldHVyblZh
bHVlR1BSMik7CiAjZW5kaWYKK3N0YXRpY19hc3NlcnQoSlNSSW5mbzo6anNSZWdUMTAgPT0gSlNS
SW5mbzo6cmV0dXJuVmFsdWVKU1IpOwogCiBpbmxpbmUgR1BSUmVnIGV4dHJhY3RSZXN1bHQoR1BS
UmVnIHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0OyB9CiAjaWYgVVNFKEpTVkFMVUU2NCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAppbmRleCA5Mjk0MjQ2MDczNDAwOTExYjZjMzU3Yzc4YTRhMGM2
YTc0ZTlhYWQ0Li4yMjhjZjg2ZTM3MmI4ZDk1Yzg3M2NiMDU3NGU0MDAxNDk2MWZkOTBiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC02NDQsOSArNjQ0LDYgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2Rl
bF9ieV92YWwpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9kZWxfYnlfaWQpCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9zdWIpCi0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2Zyb21fc2NvcGUpCi0jZW5k
aWYKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3B1dF90b19zY29wZSkKIAogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaXRlcmF0b3Jfb3BlbikKQEAgLTEwMTksMTEgKzEwMTYs
NyBAQCB2b2lkIEpJVDo6bGluaygpCiAgICAgbV9qaXRDb2RlLT5tX2ppdENvZGVNYXAgPSBqaXRD
b2RlTWFwQnVpbGRlci5maW5hbGl6ZSgpOwogICAgIG1faml0Q29kZS0+YWRvcHRNYXRoSUNzKG1f
bWF0aElDcyk7CiAgICAgbV9qaXRDb2RlLT5tX2NvbnN0YW50UG9vbCA9IFdURk1vdmUobV9jb25z
dGFudFBvb2wpOwotI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgbV9qaXRDb2RlLT5tX2lzU2hhcmVh
YmxlID0gbV9pc1NoYXJlYWJsZTsKLSNlbHNlCi0gICAgbV9qaXRDb2RlLT5tX2lzU2hhcmVhYmxl
ID0gZmFsc2U7Ci0jZW5kaWYKIAogICAgIGlmIChKSVRJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAg
ICAgZGF0YUxvZ0YoIkpJVCBnZW5lcmF0ZWQgY29kZSBmb3IgJXAgYXQgWyVwLCAlcCkuXG4iLCBt
X3VubGlua2VkQ29kZUJsb2NrLCByZXN1bHQuZXhlY3V0YWJsZU1lbW9yeSgpLT5zdGFydCgpLnVu
dGFnZ2VkUHRyKCksIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPmVuZCgpLnVudGFnZ2VkUHRy
KCkpOwpAQCAtMTA4MCw3ICsxMDczLDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0
aW9uSGFuZGxlcnMoKQogICAgIH0KIAogICAgIGlmICghbV9leGNlcHRpb25DaGVja3MuZW1wdHko
KSkgewotICAgICAgICBtX2V4Y2VwdGlvbkhhbmRsZXIgPSBsYWJlbCgpOwogICAgICAgICBtX2V4
Y2VwdGlvbkNoZWNrcy5saW5rKHRoaXMpOwogCiAgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAppbmRleCBkZTJjNWNlNzcwYmJkNTkzYjdhZTVmZDFhNjUyNjczODk0M2RkOWEx
Li4xYzY0OTYzZjBlOTQxMzI5ODM5NTU2YzZiMmVmZmY3MmZkNWFjYWQ5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKQEAgLTI1NCw3ICsyNTQsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgbG9hZENvbnN0YW50KHVuc2lnbmVkIGNvbnN0YW50SW5kZXgsIEdQUlJlZyk7CiAgICAg
cHJpdmF0ZToKICAgICAgICAgdm9pZCBsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyk7Ci0gICAgICAg
IHZvaWQgbG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAg
ICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyLCBKU1ZhbHVl
UmVncyk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgdm9pZCBsb2FkQ29kZUJsb2Nr
Q29uc3RhbnRQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCk7CisgICAgICAgIHZv
aWQgbG9hZENvZGVCbG9ja0NvbnN0YW50VGFnKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCk7
CisjZW5kaWYKIAogICAgICAgICB2b2lkIGVtaXRQdXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1
ZShHUFJSZWcgcmVzdWx0ID0gcmVnVDApOwogCkBAIC0zNDgsOSArMzUyLDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogICAgICAgICBQcml2YXRlRmll
bGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQoT3ApOwogCi0gICAgICAgIGVudW0gRmluYWxP
YmplY3RNb2RlIHsgTWF5QmVGaW5hbCwgS25vd25Ob3RGaW5hbCB9OwotCiAgICAgICAgIHZvaWQg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBk
c3QpOworICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKFZpcnR1YWxS
ZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KTsKICAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIHNyYyk7CiAgICAgICAg
IHZvaWQgZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwg
UmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwogCkBAIC0zNjEsMzMgKzM2NCwy
NSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQo
VmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgVmlydHVhbFJlZ2lzdGVy
JiBvcCwgaW50MzJfdCYgY29uc3RhbnQpOwogCiAgICAgICAgIHZvaWQgZW1pdExvYWREb3VibGUo
VmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgdmFsdWUpOwotICAgICAgICB2b2lkIGVtaXRM
b2FkVGFnKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcpOwotICAgICAgICB2b2lkIGVt
aXRMb2FkUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCk7CiAKLSAg
ICAgICAgdm9pZCBlbWl0TG9hZChjb25zdCBKU1ZhbHVlJiB2LCBSZWdpc3RlcklEIHRhZywgUmVn
aXN0ZXJJRCBwYXlsb2FkKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZChWaXJ0dWFsUmVnaXN0ZXIs
IFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSA9IGNh
bGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZDIoVmlydHVhbFJlZ2lzdGVy
LCBSZWdpc3RlcklEIHRhZzEsIFJlZ2lzdGVySUQgcGF5bG9hZDEsIFZpcnR1YWxSZWdpc3Rlciwg
UmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQyKTsKKyAgICAgICAgdm9pZCBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgdGFnLCBS
ZWdpc3RlcklEIHBheWxvYWQpOworICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJU
YWcoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpOwogCiAgICAgICAgIHZvaWQg
ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5
bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgICAgICB2b2lk
IGVtaXRTdG9yZUludDMyKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29s
IGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihWaXJ0
dWFsUmVnaXN0ZXIsIFRydXN0ZWRJbW0zMiBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiA9IGZh
bHNlKTsKICAgICAgICAgdm9pZCBlbWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0
ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNDZWxsID0gZmFsc2UpOwogICAgICAgICB2b2lkIGVt
aXRTdG9yZUJvb2woVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5k
ZXhJc0Jvb2wgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlRG91YmxlKFZpcnR1YWxS
ZWdpc3RlciwgRlBSZWdpc3RlcklEIHZhbHVlKTsKIAogICAgICAgICB2b2lkIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICB2b2lkIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnKTsKICAg
ICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCk7CiAKLSAg
ICAgICAgdm9pZCBjb21waWxlR2V0QnlJZEhvdFBhdGgoY29uc3QgSWRlbnRpZmllciopOwotCiAg
ICAgICAgIC8vIEFyaXRobWV0aWMgb3Bjb2RlIGhlbHBlcnMKICAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRCaW5hcnlEb3VibGVPcChjb25zdCBJbnN0cnVj
dGlvbiAqLCBPcGVyYW5kVHlwZXMsIEp1bXBMaXN0JiBub3RJbnQzMk9wMSwgSnVtcExpc3QmIG5v
dEludDMyT3AyLCBib29sIG9wMUlzSW5SZWdpc3RlcnMgPSB0cnVlLCBib29sIG9wMklzSW5SZWdp
c3RlcnMgPSB0cnVlKTsKIAogI2Vsc2UgLy8gVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgdm9p
ZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQg
ZHN0KTsKLSAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhWaXJ0dWFsUmVnaXN0
ZXIgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiwgUmVnaXN0ZXJJ
RCBkc3QyKTsKICAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSA9IHJlZ1QwKTsKICAgICAgICAgdm9pZCBlbWl0U3Rv
cmVDZWxsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCAvKiBv
bmx5IHVzZWQgaW4gSlNWYWx1ZTMyXzY0ICovID0gZmFsc2UpCiAgICAgICAgIHsKQEAgLTQwMyw5
ICszOTgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90
TnVtYmVyKFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEIHNjcmF0Y2gpOwotCi0gICAgICAg
IHZvaWQgY29tcGlsZUdldEJ5SWRIb3RQYXRoKFZpcnR1YWxSZWdpc3RlciBiYXNlUmVnLCBjb25z
dCBJZGVudGlmaWVyKik7Ci0KICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAgICAgICAg
IHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKEpTVmFsdWVSZWdzKTsKQEAgLTY0Nyw5
ICs2MzksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21f
YXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRf
dG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7Ci0jaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotI2VuZGlmCiAg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogCiAgICAgICAgIHZvaWQgZW1pdFNs
b3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImLCBTbG93UGF0aEZ1bmN0aW9uKTsKQEAgLTY3MSwyMSArNjYwLDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MsIEdQUlJlZyk7CiAgICAgICAgIHZvaWQgZW1pdFZhclJlYWRPbmx5Q2hl
Y2soUmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNoR1BSKTsKLSAgICAgICAgdm9pZCBlbWl0UmVz
b2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBi
b29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7Ci0gICAgICAgIHZv
aWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1
Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB2b2lk
IGVtaXRHZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcpOwotICAgICAg
ICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBH
UFJSZWcpOwotI2Vsc2UKLSAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRl
cihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnIHRhZywgR1BSUmVnIHBheWxvYWQpOwotICAgICAg
ICB2b2lkIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcgdGFn
LCBHUFJSZWcgcGF5bG9hZCk7Ci0jZW5kaWYKLSAgICAgICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZh
cihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKTsKICAgICAgICAgdm9p
ZCBlbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCopOwogICAgICAgICB2b2lkIGVtaXROb3Rp
ZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50ZXJUb1NldCk7Ci0gICAgICAgIHZvaWQgZW1p
dFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSwgV2F0Y2hwb2ludFNldCopOwotICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUlu
ZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUs
IFdhdGNocG9pbnRTZXQqKik7Ci0gICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVh
bFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
LCBXYXRjaHBvaW50U2V0Kik7CiAKICAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3Rlcik7CiAKQEAgLTczMywxNCArNzA5LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVl
SXNGYWxzZXlHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc1RydXRoeUdlbmVyYXRvcihWTSYpOwotCisjZW5k
aWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0
b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gc2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHRlbXBs
YXRlIDxSZXNvbHZlVHlwZT4KICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJik7CiAgICAgICAg
IHRlbXBsYXRlIDxSZXNvbHZlVHlwZT4KICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZNJik7Ci0j
ZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKICAgICAgICAgSnVtcCBnZXRTbG93
Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogICAgICAgICB7CkBA
IC05ODcsOSArOTYyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSnVtcExpc3QgbV9l
eGNlcHRpb25DaGVja3M7CiAgICAgICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENh
bGxGcmFtZVJvbGxiYWNrOwotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAg
TGFiZWwgbV9leGNlcHRpb25IYW5kbGVyOwotI2VuZGlmCiAKICAgICAgICAgdW5zaWduZWQgbV9n
ZXRCeUlkSW5kZXggeyBVSU5UX01BWCB9OwogICAgICAgICB1bnNpZ25lZCBtX2dldEJ5VmFsSW5k
ZXggeyBVSU5UX01BWCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRBcml0aG1ldGljLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRp
Yy5jcHAKaW5kZXggOGYxYTdjNWI4MzQ2MTBhYTBiOGFmYzgzMTdiOTFjZGUwMTc0ZTZiMy4uOGY0
ZDgwYjk5Y2ZjOWU5MWZlMjMzZDRiZTkyNmY1NjM3ZjY2ZWM2ZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCkBAIC0yMTAsNyArMjEwLDggQEAgdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxS
ZWdpc3RlciBvcDIsIHVuc2kKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIs
IHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwogICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMSk7CiAKQEAgLTIzOCw3ICsyMzksOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBW
aXJ0dWFsUmVnaXN0ZXIgbwogICAgICAgICBpbnQzMl90IG9wMWltbSA9IGdldE9wZXJhbmRDb25z
dGFudEludChvcDEpOwogICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29uZGl0aW9u
KSwgcmVnVDEsIEltbTMyKG9wMWltbSkpLCB0YXJnZXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEpOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwogICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRp
dGlvbiwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKICAgICB9CiB9CkBAIC0yNjQsNyArMjY2LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXIKICAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRP
cGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKICAgICAgICAgY29tcGFyZTMyKGNvbW11dGUoY29uZGl0
aW9uKSwgcmVnVDAsIEltbTMyKG9wMWltbSksIHJlZ1QwKTsKICAgICB9IGVsc2UgewotICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKICAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwg
cmVnVDAsIHJlZ1QxLCByZWdUMCk7CiAgICAgfQogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7CkBAIC00MjIsNyArNDI1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgQVNTRVJUKHJl
Z1Q0ICE9IGVkeCk7CiAgICAgQVNTRVJUKHJlZ1Q0ICE9IGVjeCk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1Q0LCBvcDIsIGVjeCk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIHJlZ1Q0KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgZWN4
KTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDQpOwogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChlY3gpOwogCkBAIC00ODAsNyArNDg0LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFs
Q29uZGl0aW8KIAogICAgIC8vIENoYXJhY3RlciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25z
dGFudENoYXIob3AxKSkgewotICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSwgcmVnVDApOwogICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKICAgICAgICAgSnVtcExpc3Qg
ZmFpbHVyZXM7CiAgICAgICAgIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKHJlZ1QwLCByZWdUMCwg
ZmFpbHVyZXMpOwpAQCAtNDg5LDcgKzQ5Myw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIp
KSB7Ci0gICAgICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChyZWdUMSkpOwogICAgICAgICBKdW1wTGlzdCBmYWlsdXJlczsKICAg
ICAgICAgZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcocmVnVDAsIHJlZ1QwLCBmYWlsdXJlcyk7CkBA
IC00OTgsMTUgKzUwMiwxNiBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpbwogICAgICAgICByZXR1
cm47CiAgICAgfSAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAg
ICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AyLCByZWdUMywgcmVnVDIpOwogICAgICAgICBub3RJbnQzMk9wMi5hcHBlbmQoYnJh
bmNoSWZOb3RJbnQzMihyZWdUMykpOwogICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUo
Y29uZGl0aW9uKSwgcmVnVDIsIEltbTMyKGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIo
KSkpLCB0YXJnZXQpOwogICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkg
ewotICAgICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMSwgcmVnVDApOwogICAgICAgICBub3RJbnQzMk9wMS5h
cHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdUMSkpOwogICAgICAgICBhZGRKdW1wKGJyYW5jaDMy
KGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKGdldENvbnN0YW50T3BlcmFuZChvcDIpLmFzSW50MzIo
KSkpLCB0YXJnZXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRMb2FkMihvcDEsIHJlZ1Qx
LCByZWdUMCwgb3AyLCByZWdUMywgcmVnVDIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgcmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDIsIHJlZ1QzLCByZWdUMik7CiAgICAgICAgIG5vdEludDMyT3AxLmFwcGVuZChicmFuY2hJZk5v
dEludDMyKHJlZ1QxKSk7CiAgICAgICAgIG5vdEludDMyT3AyLmFwcGVuZChicmFuY2hJZk5vdElu
dDMyKHJlZ1QzKSk7CiAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwg
cmVnVDIpLCB0YXJnZXQpOwpAQCAtNTMzLDEzICs1MzgsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfY29t
cGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0
aW9uYWwKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEp
KSB7Ci0gICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMiwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5k
KG9wMSkuYXNJbnQzMigpKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25z
dGFudEludChvcDIpKSB7Ci0gICAgICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgICAg
IGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVy
YW5kKG9wMikuYXNJbnQzMigpKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1p
dExvYWQyKG9wMSwgcmVnVDEsIHJlZ1QwLCBvcDIsIHJlZ1QzLCByZWdUMik7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMSwgcmVnVDApOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihjb25kaXRpb24sIHJlZ1QwLCByZWdUMiksIHRhcmdldCk7CiAgICAgfQogfQpAQCAtNTUz
LDEzICs1NTksMTQgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGkKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQo
b3AxKSkgewotICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMywgcmVnVDIpOwogICAgICAgICBjb21wYXJl
MzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMiwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9w
MSkuYXNJbnQzMigpKSwgcmVnVDApOwogICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJ
bnQob3AyKSkgewotICAgICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMSwgcmVnVDApOwogICAgICAgICBjb21w
YXJlMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikuYXNJ
bnQzMigpKSwgcmVnVDApOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRMb2FkMihvcDEsIHJl
Z1QxLCByZWdUMCwgb3AyLCByZWdUMywgcmVnVDIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgcmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1Qw
LCByZWdUMiwgcmVnVDApOwogICAgIH0KICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwpA
QCAtNTc1LDggKzU4Miw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25z
dCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvCiAKICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwotICAg
IGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVn
VDMsIHJlZ1QyKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbiwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihp
bnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwpAQCAtNjA0
LDcgKzYxMSw3IEBAIHZvaWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHJ1Y3Rp
b24gKmluc3RydWN0aW9uLCBPcGVyYW5kVHlwZXMgdHlwZXMsCiAgICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihBYm92ZSwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RU
YWcpKSk7CiAKICAgICAgICAgaWYgKCFvcDJJc0luUmVnaXN0ZXJzKQotICAgICAgICAgICAgZW1p
dExvYWQob3AyLCByZWdUMywgcmVnVDIpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDIsIHJlZ1QzLCByZWdUMik7CiAKICAgICAgICAgSnVtcCBkb3VibGVPcDIgPSBicmFu
Y2gzMihCZWxvdywgcmVnVDMsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKTsKIApA
QCAtNjY4LDcgKzY3NSw3IEBAIHZvaWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5z
dHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBPcGVyYW5kVHlwZXMgdHlwZXMsCiAgICAgICAgIEFTU0VS
VChvcDJJc0luUmVnaXN0ZXJzKTsKIAogICAgICAgICBpZiAoIW9wMUlzSW5SZWdpc3RlcnMpCi0g
ICAgICAgICAgICBlbWl0TG9hZFBheWxvYWQob3AxLCByZWdUMCk7CisgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChvcDEsIHJlZ1QwKTsKIAogICAgICAgICBjb252ZXJ0
SW50MzJUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcAppbmRleCAyMjVlMTRhMWJlMDhhYmQ1NTBh
ZDYzYzQ1ZWI1MWExYzQ2MmUxYzIwLi4yZGRiY2IzMDY4YmVkOWI3NTg3NDU4MTNkYzU1NDNlZWU5
OGQ1YTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0
aWMzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGlj
MzJfNjQuY3BwCkBAIC00Nyw3ICs0Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Vuc2lnbmVkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CiAgICAgCi0gICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMSwgcmVnVDApOwogICAgIAogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIocmVnVDEpKTsKICAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIFRydXN0ZWRJbW0zMigwKSkpOwpAQCAtNTksNyArNTks
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
Yz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAK
LSAgICBlbWl0TG9hZChzcmNEc3QsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmNEc3QsIHJlZ1QxLCByZWdUMCk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdEludDMyKHJlZ1QxKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3cs
IFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0OwogCi0gICAgZW1pdExvYWQoc3Jj
RHN0LCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBy
ZWdUMSwgcmVnVDApOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RJbnQzMihyZWdUMSkp
OwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSks
IHJlZ1QwKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAppbmRleCAwOTE5OTE1
ODQ2OGMwZmUxMDJiNWRmYmZhMmJlNGZlMTczMTk3ZTJiLi45ZjQ0MTVlMjlhZGMyYjA5YzdlYTk4
YWM2ZjM4ZjVjMTkwMDQ5MWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAK
QEAgLTQzLDE4ICs0MywxMiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSB7Ci0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmV0dXJuVmFsdWVKU1Ig
eyBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiB9OwotICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBj
YWxsZWVKU1IgeyBHUFJJbmZvOjpyZWdUMCB9OwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAg
ICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmV0dXJuVmFsdWVKU1IgeyBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSIH07Ci0gICAgY29uc3RleHByIEpTVmFs
dWVSZWdzIGNhbGxlZUpTUiB7IEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCB9OwotI2Vu
ZGlmCisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGNhbGxlZUpTUiA9IEpTUkluZm86OmpzUmVn
VDEwOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBzdGF0aWNfYXNzZXJ0KCFyZXR1cm5WYWx1ZUpTUi51c2Vz
KGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisgICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAocmV0dXJu
VmFsdWVKU1IsIGNhbGxGcmFtZVJlZ2lzdGVyKSk7CiAKICAgICAvLyBSZXR1cm4gdGhlIHJlc3Vs
dCBpbiByZXR1cm5WYWx1ZUdQUiAocmV0dXJuVmFsdWVHUFIyL3JldHVyblZhbHVlR1BSIG9uIDMy
LWJpdCkuCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+
KCk7CkBAIC0xNjcsNyArMTYxLDcgQEAgSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYg
Ynl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6Q29uc3RhbnQgY2FsbExpbmtJbmYKICAgICBub3RC
aWdnZXN0LmxpbmsodGhpcyk7CiAgICAgCiAgICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCi0gICAg
Y29uc3RleHByIEpTVmFsdWVSZWdzIHRoaXNKU1IgPSBjYWxsZWVKU1I7IC8vIFVzZWQgYXMgdGVt
cG9yYXJ5IHJlZ2lzdGVyCisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHRoaXNKU1IgPSBqc1Jl
Z1QxMDsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWYWx1ZSwgdGhpc0pTUik7CiAg
ICAgc3RvcmVWYWx1ZSh0aGlzSlNSLCBBZGRyZXNzKHJlZ1Q1LCBDYWxsRnJhbWU6OnRoaXNBcmd1
bWVudE9mZnNldCgpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogCkBA
IC00NzcsNyArNDcxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiAgICAgdXNpbmcgQmFzZWxpbmVHZXRCeUlkUmVnaXN0
ZXJzOjpyZXN1bHRKU1I7CiAgICAgdXNpbmcgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHVi
SW5mb0dQUjsKIAotICAgIHN0YXRpY19hc3NlcnQoIXJldHVyblZhbHVlSlNSLnVzZXMoc3R1Yklu
Zm9HUFIpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChyZXR1cm5WYWx1ZUpTUiwgc3R1
YkluZm9HUFIpKTsKICAgICBzdGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlSlNSID09IGJhc2VKU1Ip
OyAvLyBPdGhlcndpc2Ugd2lsbCBuZWVkIG1vdmUocmV0dXJuVmFsdWVKU1IsIGJhc2VKU1IpCiAg
ICAgc3RhdGljX2Fzc2VydChiYXNlSlNSID09IHJlc3VsdEpTUik7CiAKQEAgLTU4Miw3ICs1NzYs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbikKICAgICBhZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogCiAgICAgLy8gY2Fs
bCByZXN1bHQgKHsgZG9uZSwgdmFsdWUgfSBKU09iamVjdCkgaW4gcmVnVDAgIChyZWdUMS9yZWdU
MCBvciAzMi1iaXQpCi0gICAgc3RhdGljX2Fzc2VydCghcmV0dXJuVmFsdWVKU1IudXNlcyhzdHVi
SW5mb0dQUikpOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKHJlc3VsdEpTUiwgc3R1Yklu
Zm9HUFIpKTsKIAogICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBpdGVyQ2FsbFJlc3VsdEpTUiA9
IGRvbnRDbG9iYmVySlNSOwogICAgIG1vdmVWYWx1ZVJlZ3MocmV0dXJuVmFsdWVKU1IsIGl0ZXJD
YWxsUmVzdWx0SlNSKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKaW5kZXgg
ZDYwMmZjOTI2YzkzMjllMjEyYTRkNTA3ZmQ4NmQwNzhhYmE3YmExYS4uZGI4MTkwN2Y5YjA0NDBm
NjdiZmNkODYyZGM4YTRlMjhjZjliODU0YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVzLmgKQEAgLTY1LDEyICs2NSw4IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzS25v
d25DZWxsKFZpcnR1YWxSZWdpc3RlciBzcmMpCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSklUOjpn
ZXRDb25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICBBU1NFUlQoc3Jj
LmlzQ29uc3RhbnQoKSk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICByZXR1cm4gbV9wcm9m
aWxlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSNlbHNlCiAgICAgUkVMRUFTRV9BU1NF
UlQobV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24o
c3JjKSAhPSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOwogICAg
IHJldHVybiBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotI2VuZGlmCiB9
CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihS
ZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKQEAgLTE2NywzNSArMTYzLDIy
IEBAIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0
aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpCiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQo
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lz
dGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwotI2Vsc2UKLSAgICBlbWl0
U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKLSNlbmRpZgorICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUpTUik7CiAgICAgcmV0dXJu
IGNhbGw7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3Rl
ciBkc3QpCiB7CiAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7Ci0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOwotI2Vsc2UKLSAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJl
dHVyblZhbHVlR1BSKTsKLSNlbmRpZgorICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXR1cm5WYWx1ZUpTUik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgogQUxXQVlT
X0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2Rl
LCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVn
aXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwotI2Vsc2UKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIs
IHJldHVyblZhbHVlR1BSKSk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCBy
ZXR1cm5WYWx1ZUdQUik7Ci0jZW5kaWYKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZXR1cm5WYWx1ZUpTUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
dHVyblZhbHVlSlNSKTsKICAgICByZXR1cm4gY2FsbDsKIH0KIApAQCAtMjAzLDEzICsxODYsOCBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29u
c3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBBZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0KQogewogICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0
dXJuVmFsdWVHUFIpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1
ZUdQUik7Ci0jZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFs
dWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKLSAgICBlbWl0U3RvcmUo
ZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKLSNlbmRpZgorICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlSlNSKTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVKU1IpOwogfQogCiBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjpsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnKQpAQCAtMzMyLDEyICszMTAsNyBA
QCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJl
Z2lzdGVyIHNyYykKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogaW5saW5lIHN0ZDo6ZW5hYmxlX2lm
X3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQ
cm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmls
ZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVl
UmVncyByZXN1bHQgeyByZWdUMCB9OwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyByZXN1bHQgeyBy
ZWdUMSwgcmVnVDAgfTsKLSNlbmRpZgotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJlc3VsdCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwganNSZWdU
MTApOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2Zp
bGVkT3Bjb2RlKC4uLikgeyB9CkBAIC0zNDksMTIgKzMyMiw3IEBAIGlubGluZSB2b2lkIEpJVDo6
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEpTVmFsdWVS
ZWdzIHZhCiAgICAgICAgIHJldHVybjsKIAogICAgIHB0cmRpZmZfdCBvZmZzZXQgPSBtX3VubGlu
a2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkg
KyB2YWx1ZVByb2ZpbGVPZmZzZXRGb3I8Qnl0ZWNvZGU+KG1fYnl0ZWNvZGVJbmRleC5jaGVja3Bv
aW50KCkpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCk7Ci0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICBzdG9yZTY0KHZhbHVlLmdwcigpLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIs
IG9mZnNldCkpOwotI2Vsc2UKLSAgICBzdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgQWRkcmVz
cyhzX21ldGFkYXRhR1BSLCBvZmZzZXQgKyBQYXlsb2FkT2Zmc2V0KSk7Ci0gICAgc3RvcmUzMih2
YWx1ZS50YWdHUFIoKSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBvZmZzZXQgKyBUYWdPZmZzZXQp
KTsKLSNlbmRpZgorICAgIHN0b3JlVmFsdWUodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwg
b2Zmc2V0KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMzk1LDc5ICszNjMsODUgQEAg
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIg
ZHN0KQogICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0
KSk7CiB9CiAKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyIHNyYywgSlNWYWx1ZVJlZ3MgZHN0KQoreworICAgIEFTU0VSVChtX2J5
dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5n
IGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0
LgorICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CisgICAgICAgIGlmIChtX3Byb2ZpbGVkQ29k
ZUJsb2NrLT5pc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKHNyYykpCisgICAgICAg
ICAgICBtb3ZlVmFsdWUobV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKSwgZHN0
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywg
ZHN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBsb2FkVmFsdWUoYWRkcmVzc0Zvcihz
cmMpLCBkc3QpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCit7CisgICAgc3Rv
cmVWYWx1ZShmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOworfQorCisjaWYgVVNFKEpTVkFMVUUzMl82
NCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCkKK3sKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgSlNWYWx1ZVJlZ3MgeyB0YWcsIHBheWxvYWQg
fSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQ
YXlsb2FkKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KQoreworICAgIEFTU0VS
VChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQg
ZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXgg
aXMgc2V0LgorICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CisgICAgICAgIGlmIChtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5pc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKHNyYykpCisg
ICAgICAgICAgICBtb3ZlKEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNy
YykucGF5bG9hZCgpKSwgZHN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9hZENvZGVC
bG9ja0NvbnN0YW50UGF5bG9hZChzcmMsIGRzdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbG9hZDMyKHBheWxvYWRGb3Ioc3JjKSwgZHN0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyhWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdp
c3RlcklEIGRzdCkKK3sKKyAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRo
b2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24s
IHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KKyAgICBpZiAoc3JjLmlzQ29uc3RhbnQo
KSkgeworICAgICAgICBpZiAobV9wcm9maWxlZENvZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlV
bmxpbmtlZENvZGVCbG9jayhzcmMpKQorICAgICAgICAgICAgbW92ZShJbW0zMihtX3VubGlua2Vk
Q29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpLnRhZygpKSwgZHN0KTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50VGFnKHNyYywgZHN0KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBsb2FkMzIodGFnRm9yKHNyYyksIGRzdCk7Cit9CisjZWxpZiBV
U0UoSlNWQUxVRTY0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKK3sKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgSlNWYWx1ZVJlZ3MgeyBkc3QgfSk7Cit9CisKK0FMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKFZpcnR1YWxSZWdp
c3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KQoreworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjLCBKU1ZhbHVlUmVncyB7IGRzdCB9KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIGZy
b20pCit7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzIHsgZnJv
bSB9KTsKK30KKyNlbmRpZgorCisKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogCiBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2
YWx1ZSkKIHsKICAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBBU1NFUlQobV9w
cm9maWxlZENvZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhyZWcp
KTsKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fdW5s
aW5rZWRDb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJs
ZShUcnVzdGVkSW1tUHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKICAg
ICAgICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKIH0KIAotaW5saW5lIHZv
aWQgSklUOjplbWl0TG9hZFRhZyhWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykK
LXsKLSAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBtb3ZlKEltbTMyKGdldENv
bnN0YW50T3BlcmFuZChyZWcpLnRhZygpKSwgdGFnKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGxvYWQzMih0YWdGb3IocmVnKSwgdGFnKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjpl
bWl0TG9hZFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkKQot
ewotICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIG1vdmUoSW1tMzIoZ2V0Q29u
c3RhbnRPcGVyYW5kKHJlZykucGF5bG9hZCgpKSwgcGF5bG9hZCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBsb2FkMzIocGF5bG9hZEZvcihyZWcpLCBwYXlsb2FkKTsKLX0KLQotaW5s
aW5lIHZvaWQgSklUOjplbWl0TG9hZChjb25zdCBKU1ZhbHVlJiB2LCBSZWdpc3RlcklEIHRhZywg
UmVnaXN0ZXJJRCBwYXlsb2FkKQotewotICAgIG1vdmUoSW1tMzIodi5wYXlsb2FkKCkpLCBwYXls
b2FkKTsKLSAgICBtb3ZlKEltbTMyKHYudGFnKCkpLCB0YWcpOwotfQotCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIEpT
VmFsdWVSZWdzIGRzdCkKLXsKLSAgICBlbWl0TG9hZChzcmMsIGRzdC50YWdHUFIoKSwgZHN0LnBh
eWxvYWRHUFIoKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKLXsKLSAgICBl
bWl0U3RvcmUoZHN0LCBmcm9tLnRhZ0dQUigpLCBmcm9tLnBheWxvYWRHUFIoKSk7Ci19Ci0KLWlu
bGluZSB2b2lkIEpJVDo6ZW1pdExvYWQoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0
YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQotewotICAgIFJFTEVBU0Vf
QVNTRVJUKHRhZyAhPSBwYXlsb2FkKTsKLQotICAgIGlmIChiYXNlID09IGNhbGxGcmFtZVJlZ2lz
dGVyKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHBheWxvYWQgIT0gYmFzZSk7Ci0gICAgICAg
IGVtaXRMb2FkUGF5bG9hZChyZWcsIHBheWxvYWQpOwotICAgICAgICBlbWl0TG9hZFRhZyhyZWcs
IHRhZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAocGF5bG9hZCA9PSBiYXNl
KSB7IC8vIGF2b2lkIHN0b21waW5nIGJhc2UKLSAgICAgICAgbG9hZDMyKHRhZ0ZvcihyZWcsIGJh
c2UpLCB0YWcpOwotICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihyZWcsIGJhc2UpLCBwYXlsb2Fk
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGxvYWQzMihwYXlsb2FkRm9yKHJlZywg
YmFzZSksIHBheWxvYWQpOwotICAgIGxvYWQzMih0YWdGb3IocmVnLCBiYXNlKSwgdGFnKTsKLX0K
LQotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZDIoVmlydHVhbFJlZ2lzdGVyIHJlZzEsIFJlZ2lz
dGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwgVmlydHVhbFJlZ2lzdGVyIHJlZzIsIFJl
Z2lzdGVySUQgdGFnMiwgUmVnaXN0ZXJJRCBwYXlsb2FkMikKLXsKLSAgICBlbWl0TG9hZChyZWcy
LCB0YWcyLCBwYXlsb2FkMik7Ci0gICAgZW1pdExvYWQocmVnMSwgdGFnMSwgcGF5bG9hZDEpOwot
fQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdp
c3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCiB7CkBAIC00
ODIsMTMgKzQ1Niw2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoVmlydHVhbFJl
Z2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluCiAgICAgICAgIHN0b3JlMzIo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKHJlZykpOwogfQogCi1pbmxp
bmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKFZpcnR1YWxSZWdpc3RlciByZWcsIFRydXN0ZWRJ
bW0zMiBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMikKLXsKLSAgICBzdG9yZTMyKHBheWxvYWQs
IHBheWxvYWRGb3IocmVnKSk7Ci0gICAgaWYgKCFpbmRleElzSW50MzIpCi0gICAgICAgIHN0b3Jl
MzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKHJlZykpOwotfQotCiBp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUNlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0
ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNDZWxsKQogewogICAgIHN0b3JlMzIocGF5bG9hZCwg
cGF5bG9hZEZvcihyZWcpKTsKQEAgLTUwMywxMSArNDcwLDYgQEAgaW5saW5lIHZvaWQgSklUOjpl
bWl0U3RvcmVCb29sKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9v
bCBpbmQKICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyks
IHRhZ0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVEb3VibGUoVmly
dHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQotewotICAgIHN0b3JlRG91Ymxl
KHZhbHVlLCBhZGRyZXNzRm9yKHJlZykpOwotfQotCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9y
ZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdpc3RlcklE
IGJhc2UpCiB7CiAgICAgc3RvcmUzMihJbW0zMihjb25zdGFudC5wYXlsb2FkKCkpLCBwYXlsb2Fk
Rm9yKHJlZywgYmFzZSkpOwpAQCAtNTUzLDQ0ICs1MTUsNiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wg
SklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJl
Z2lzdAogCiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCi0vLyBnZXQgYXJnIHB1dHMgYW4g
YXJnIGZyb20gdGhlIFNGIHJlZ2lzdGVyIGFycmF5IGludG8gYSBoL3cgcmVnaXN0ZXIKLUFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IHNyYywgUmVnaXN0ZXJJRCBkc3QpCi17Ci0gICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8v
IFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBn
ZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0KLSAgICBpZiAoc3Jj
LmlzQ29uc3RhbnQoKSkgewotICAgICAgICBpZiAobV9wcm9maWxlZENvZGVCbG9jay0+aXNDb25z
dGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhzcmMpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAgICAg
ICAgIG1vdmUoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywgZHN0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGxvYWQ2NChhZGRyZXNzRm9yKHNyYyksIGRzdCk7Ci19
Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyIHNyYywgSlNWYWx1ZVJlZ3MgZHN0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLCBkc3QucGF5bG9hZEdQUigpKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoVmlydHVhbFJlZ2lzdGVyIHNyYzEsIFJlZ2lzdGVy
SUQgZHN0MSwgVmlydHVhbFJlZ2lzdGVyIHNyYzIsIFJlZ2lzdGVySUQgZHN0MikKLXsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIGRzdDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjMiwgZHN0Mik7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQotewot
ICAgIHN0b3JlNjQoZnJvbSwgYWRkcmVzc0Zvcihkc3QpKTsKLX0KLQotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBKU1Zh
bHVlUmVncyBmcm9tKQotewotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBmcm9tLnBh
eWxvYWRHUFIoKSk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJ
ZkJvdGhKU0NlbGxzKFJlZ2lzdGVySUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcyLCBSZWdpc3RlcklE
IHNjcmF0Y2gpCiB7CiAgICAgbW92ZShyZWcxLCBzY3JhdGNoKTsKQEAgLTcyNSwxNCArNjQ5LDM0
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRHbG9iYWxPYmplY3QoR1BSUmVnIHJlc3Vs
dCkKICAgICBsb2FkQ29uc3RhbnQobV9nbG9iYWxPYmplY3RDb25zdGFudCwgcmVzdWx0KTsKIH0K
IAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxS
ZWdpc3RlciBjb25zdGFudCwgR1BSUmVnIHJlc3VsdCkKK0FMV0FZU19JTkxJTkUgc3RhdGljIHZv
aWQgbG9hZEFkZHJPZkNvZGVCbG9ja0NvbnN0YW50QnVmZmVyKEpJVCAmaml0LCBHUFJSZWcgZHN0
KQoreworICAgIGppdC5sb2FkUHRyKGppdC5hZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIGRzdCk7CisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGRzdCwgQ29kZUJsb2Nr
OjpvZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigpKSwgZHN0KTsKK30KKworQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6bG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25z
dGFudCwgSlNWYWx1ZVJlZ3MgZHN0KQogewogICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50Lmlz
Q29uc3RhbnQoKSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHJlc3VsdCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgQ29kZUJsb2NrOjpv
ZmZzZXRPZkNvbnN0YW50c1ZlY3RvckJ1ZmZlcigpKSwgcmVzdWx0KTsKLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVzdWx0LCBjb25zdGFudC50b0NvbnN0YW50SW5kZXgoKSAqIHNpemVvZih2b2lkKikp
LCByZXN1bHQpOworICAgIGxvYWRBZGRyT2ZDb2RlQmxvY2tDb25zdGFudEJ1ZmZlcigqdGhpcywg
ZHN0LnBheWxvYWRHUFIoKSk7CisgICAgbG9hZFZhbHVlKEFkZHJlc3MoZHN0LnBheWxvYWRHUFIo
KSwgY29uc3RhbnQudG9Db25zdGFudEluZGV4KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgZHN0KTsK
IH0KIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2Fk
Q29kZUJsb2NrQ29uc3RhbnRQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciBjb25zdGFudCwgUmVnaXN0
ZXJJRCBkc3QpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnQuaXNDb25zdGFudCgpKTsK
KyAgICBsb2FkQWRkck9mQ29kZUJsb2NrQ29uc3RhbnRCdWZmZXIoKnRoaXMsIGRzdCk7CisgICAg
bG9hZDMyKEFkZHJlc3MoZHN0LCBjb25zdGFudC50b0NvbnN0YW50SW5kZXgoKSAqIHNpemVvZihS
ZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KSwgZHN0KTsKK30KK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudFRhZyhWaXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQsIFJl
Z2lzdGVySUQgZHN0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50LmlzQ29uc3RhbnQo
KSk7CisgICAgbG9hZEFkZHJPZkNvZGVCbG9ja0NvbnN0YW50QnVmZmVyKCp0aGlzLCBkc3QpOwor
ICAgIGxvYWQzMihBZGRyZXNzKGRzdCwgY29uc3RhbnQudG9Db25zdGFudEluZGV4KCkgKiBzaXpl
b2YoUmVnaXN0ZXIpICsgVGFnT2Zmc2V0KSwgZHN0KTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcAppbmRleCBmODQ0NTg3ODAzYzI2MThjNjgwMzk4MzZjZWU2YzdiMzRm
ZDJjMzA0Li41ODBmMjdlMmYyNTMxN2ZkZWMxYTAzMjBiM2EyZTBiYzM1YWE4MTYwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTQ1LDggKzQ1LDYgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotCiB2b2lkIEpJVDo6ZW1pdF9v
cF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vdj4oKTsKQEAgLTU1LDI2ICs1
MywyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIAogICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIGlmICht
X3Byb2ZpbGVkQ29kZUJsb2NrLT5pc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKHNy
YykpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5n
ZXRDb25zdGFudChzcmMpOwotICAgICAgICAgICAgc3RvcmU2NChJbW02NChKU1ZhbHVlOjplbmNv
ZGUodmFsdWUpKSwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICAgICAgICAgIHN0b3JlVmFsdWUobV91
bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKSwgYWRkcmVzc0Zvcihkc3QpKTsKICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIHJl
Z1QwKTsKLSAgICAgICAgICAgIHN0b3JlNjQocmVnVDAsIGFkZHJlc3NGb3IoZHN0KSk7CisgICAg
ICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCBqc1JlZ1QxMCk7CisgICAgICAgICAg
ICBzdG9yZVZhbHVlKGpzUmVnVDEwLCBhZGRyZXNzRm9yKGRzdCkpOwogICAgICAgICB9Ci0KICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxvYWQ2NChhZGRyZXNzRm9yKHNyYyksIHJlZ1Qw
KTsKLSAgICBzdG9yZTY0KHJlZ1QwLCBhZGRyZXNzRm9yKGRzdCkpOworICAgIGxvYWRWYWx1ZShh
ZGRyZXNzRm9yKHNyYyksIGpzUmVnVDEwKTsKKyAgICBzdG9yZVZhbHVlKGpzUmVnVDEwLCBhZGRy
ZXNzRm9yKGRzdCkpOwogfQogCi0KIHZvaWQgSklUOjplbWl0X29wX2VuZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRW5kPigpOwotICAgIFJFTEVBU0VfQVNTRVJUKHJldHVyblZhbHVl
R1BSICE9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fdmFsdWUsIHJldHVyblZhbHVlR1BSKTsKKyAgICBzdGF0aWNfYXNzZXJ0KCFyZXR1
cm5WYWx1ZUpTUi51c2VzKGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUpTUik7CiAgICAgZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlcygpOwogICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7
CkBAIC04Nyw2ICs4Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX2ptcChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwogfQog
CisKIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5ld09iamVjdD4oKTsKQEAgLTEwNSw3ICsxMDEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
bG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZz
ZXQoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1
bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIG11dGF0b3JGZW5jZSgqbV92bSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgYm94Q2VsbChyZXN1bHRSZWcs
IGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCBq
c1JlZ1QxMCk7CiAKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwogfQpAQCAtMTE5LDkgKzEx
NiwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhv
cGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmVSZWcpOwotICAgIGVtaXRTdG9yZUNl
bGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CisgICAgYm94Q2VsbChyZXR1cm5WYWx1ZUdQUiwgcmV0
dXJuVmFsdWVKU1IpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1
ZUpTUik7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVy
cmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlk
ZXNIYXNJbnN0YW5jZT4oKTsKQEAgLTIxMCwxMiArMjEwLDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFMKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0
aW9uKikKLXsKLSAgICAvLyBUaGlzIGFsd2F5cyBnb2VzIHRvIHNsb3cgcGF0aCBzaW5jZSB3ZSBl
eHBlY3QgaXQgdG8gYmUgcmFyZS4KLSAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotfQotICAgIAog
dm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cElzRW1wdHk+KCk7CkBAIC0yMjksMzMgKzIyMywzOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19l
bXB0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAorI2VuZGlmCisKIHZvaWQgSklUOjplbWl0X29wX3R5
cGVvZl9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZklz
VW5kZWZpbmVkPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxs
ID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCBqc1JlZ1QxMCk7CisgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwoanNSZWdUMTApOwog
Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVl
VW5kZWZpbmVkKSwgcmVnVDApOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgY29tcGFyZTY0KEVx
dWFsLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVu
ZGVmaW5lZCksIHJlZ1QwKTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgY29tcGFyZTMy
KEVxdWFsLCBqc1JlZ1QxMC50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlZ1QwKTsKKyNlbmRpZgogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICAKICAg
ICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICBK
dW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJl
c3MoanNSZWdUMTAucGF5bG9hZEdQUigpLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAgICAgbW92ZShUcnVzdGVk
SW1tMzIoMCksIHJlZ1QwKTsKICAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBq
dW1wKCk7CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0TG9h
ZFN0cnVjdHVyZSh2bSgpLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIHJlZ1QxLCByZWdUMik7CiAg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBT
dHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwogICAgIGNvbXBhcmVQdHIo
RXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOwogCiAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5saW5rKHRoaXMpOwogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBib3hCb29sZWFuKHJl
Z1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICBib3hCb29sZWFuKHJlZ1QwLCBqc1JlZ1QxMCk7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIGpzUmVnVDEwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5k
ZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAg
LTI2NCwxNSArMjY0LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBqc1JlZ1QxMCk7CiAKLSAg
ICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAg
ICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxs
KSwgcmVnVDApOworICAgIGVtaXRUdXJuVW5kZWZpbmVkSW50b051bGwoanNSZWdUMTApOworICAg
IGlzTnVsbChqc1JlZ1QxMCwgcmVnVDApOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
Ym94Qm9vbGVhbihyZWdUMCwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCBqc1JlZ1QxMCk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorCiB2b2lkIEpJVDo6ZW1p
dF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+
KCk7CkBAIC00MTgsMTUgKzQyMCwyNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9r
ZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCisjZW5kaWYKKwogdm9pZCBKSVQ6OmVtaXRfb3Bf
c2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0
aW9uTmFtZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rp
b24sIGFyZ3VtZW50R1BSMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X25hbWUsIGFyZ3VtZW50R1BSMik7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjAp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBhcmd1bWVudEdQ
UjAsIGFyZ3VtZW50R1BSMSwgYXJndW1lbnRHUFIyKTsKKworICAgIHVzaW5nIFNsb3dPcGVyYXRp
b24gPSBkZWNsdHlwZShvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUpOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlv
biwgMD4oKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGZ1bmN0aW9uR1BSID0gcHJlZmVycmVkQXJn
dW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3Mg
bmFtZUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDI+KCk7CisKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChieXRlY29kZS5tX2Z1bmN0aW9uLCBmdW5j
dGlvbkdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX25hbWUsIG5h
bWVKU1IpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgZ2xvYmFsT2JqZWN0R1BSLCBmdW5j
dGlvbkdQUiwgbmFtZUpTUik7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorCiB2b2lkIEpJVDo6
ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5vdD4oKTsKQEAgLTQ0
MiwyMSArNDU0LDI0IEBAIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3QpOwogfQogCisjZW5kaWYKKwogdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZmFsc2U+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwog
Ci0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBKU1Zh
bHVlUmVncyB2YWx1ZSA9IGpzUmVnVDEwOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2Jq
ZWN0R1BSID0gcmVnVDM7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFw
KHZhbHVlLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGdsb2JhbE9iamVjdEdQUikpOwogICAgIGNvbnN0
ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAgICAg
bG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZG
YWxzZXkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVn
VDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2Jq
ZWN0R1BSKSwgdGFyZ2V0KTsKKyAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIHZhbHVl
LCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNGYWxzZXlHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9u
WmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNDczLDYgKzQ4OCw3IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjp2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKFZNJiB2
bSkKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9
IHJlZ1QwOworICAgIHN0YXRpY19hc3NlcnQodmFsdWUgPT0ganNSZWdUMTAucGF5bG9hZEdQUigp
KTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwogICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CkBAIC01MDMsNDggKzUxOSw1MSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIGpzUmVnVDEwKTsKKyAgICBKdW1wIGlzSW1tZWRpYXRl
ID0gYnJhbmNoSWZOb3RDZWxsKGpzUmVnVDEwKTsKIAogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlND
ZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVj
dHVyZS4KLSAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4
KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoanNSZWdUMTAucGF5bG9hZEdQ
UigpLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKSk7CisgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwganNSZWdUMTAu
cGF5bG9hZEdQUigpLCByZWdUMiwgcmVnVDEpOwogICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDAp
OwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgbWFzcXVl
cmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CiAKICAgICAvLyBOb3cgaGFuZGxl
IHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCiAgICAgaXNJbW1lZGlhdGUu
bGluayh0aGlzKTsKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRh
ZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAg
ICBlbWl0VHVyblVuZGVmaW5lZEludG9OdWxsKGpzUmVnVDEwKTsKKyAgICBhZGRKdW1wKGJyYW5j
aElmTnVsbChqc1JlZ1QxMCksIHRhcmdldCk7CiAKICAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQubGluayh0aGlzKTsKICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5s
aW5rKHRoaXMpOwotfTsKK30KKwogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxTnVsbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBq
c1JlZ1QxMCk7CisgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChqc1JlZ1Qx
MCk7CiAKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgYWRkSnVtcChicmFuY2hU
ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Ci0gICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgYWRkSnVtcChi
cmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpLCB0YXJnZXQpOworICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGpzUmVnVDEwLnBheWxv
YWRHUFIoKSwgcmVnVDIsIHJlZ1QxKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAg
ICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIHdhc05vdElt
bWVkaWF0ZSA9IGp1bXAoKTsKIAogICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNl
cyAtIHVuZGVmaW5lZCAmIG51bGwKICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFk
ZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgIGVtaXRUdXJuVW5kZWZp
bmVkSW50b051bGwoanNSZWdUMTApOworICAgIGFkZEp1bXAoYnJhbmNoSWZOb3ROdWxsKGpzUmVn
VDEwKSwgdGFyZ2V0KTsKIAogICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwogfQogCisj
aWYgVVNFKEpTVkFMVUU2NCkKKwogdm9pZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdW5kZWZpbmVkT3JOdWxsPigpOwpAQCAt
NTc2LDcgKzU5NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9wdHIoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIGxvYWRDb2RlQmxvY2tDb25zdGFu
dChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMSk7CisgICAgbG9hZENvZGVCbG9ja0Nv
bnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIEpTVmFsdWVSZWdzIHsgcmVnVDEgfSk7
CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CiB9
CiAKQEAgLTU4Nyw3ICs2MDYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKICAg
ICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIGxvYWRDb2Rl
QmxvY2tDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMSk7CisgICAgbG9h
ZENvZGVCbG9ja0NvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIEpTVmFsdWVSZWdz
IHsgcmVnVDEgfSk7CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVx
dWFsLCByZWdUMCwgcmVnVDEpOwogICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKDEp
LCBieXRlY29kZSwgT3BKbmVxUHRyOjpNZXRhZGF0YTo6b2Zmc2V0T2ZIYXNKdW1wZWQoKSk7CiAg
ICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CkBAIC01OTcsNyArNjE2LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4o
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5
dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2xocywgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9y
aHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCBy
ZWdUMik7CiAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKICAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwpAQCAtNjA4LDI2ICs2Mjgs
MzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBhZGRKdW1wKGJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwogfQogCisjZW5kaWYKKwogdm9pZCBKSVQ6
OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigpOwog
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdU
MDsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgdmFsdWUgPSBqc1JlZ1QxMDsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKICNpZiAh
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9
IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc2NyYXRjaDEgPSByZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVn
VDM7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKKyAgICBz
dGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcCh2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBnbG9iYWxP
YmplY3RHUFIpKTsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSB0cnVlOwogICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsK
LSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2Ny
YXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdldCk7CisgICAgYWRkSnVtcChicmFu
Y2hJZlRydXRoeSh2bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiks
IHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2
YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFk
ZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTY0NCw2ICs2
NjgsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6dmFsdWVJ
c1RydXRoeUdlbmVyYXRvcihWTSYgdm0pCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNv
bnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICBzdGF0aWNfYXNzZXJ0KHZhbHVlID09
IGpzUmVnVDEwLnBheWxvYWRHUFIoKSk7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9
IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKICAgICBjb25z
dGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwpAQCAt
NjY4LDEwICs2OTMsMTMgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6OnZhbHVlSXNUcnV0aHlHZW5lcmF0b3IoVk0mIHZtKQogfQogI2VuZGlmIC8vIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKwogdm9pZCBKSVQ6OmVtaXRf
b3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3Jocywg
cmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9saHMsIHJlZ1Qw
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CiAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGNv
bXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKQEAgLTY4MywyMSArNzExLDI3IEBAIHZvaWQg
SklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVj
b2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwogfQogCisjZW5kaWYKKwogdm9pZCBKSVQ6OmVtaXRf
b3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRocm93PigpOwotICAgIEFT
U0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7CisgICAgc3RhdGljX2Fzc2VydChyZWdUMCA9
PSByZXR1cm5WYWx1ZUdQUik7CiAKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAg
Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRy
eUZyYW1lKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJl
Z1QwKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDEsIHJlZ1QwKTsKKyAgICB1c2luZyBT
bG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uVGhyb3cpOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlv
biwgMD4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgdmFsdWVKU1IgPSBwcmVmZXJyZWRB
cmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAxPigpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVKU1IpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xv
YmFsT2JqZWN0R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRp
b25UaHJvdywgZ2xvYmFsT2JqZWN0R1BSLCB2YWx1ZUpTUik7CiAgICAganVtcFRvRXhjZXB0aW9u
SGFuZGxlcih2bSgpKTsKICNlbHNlCiAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IGFyZ3VtZW50R1BSMjsKQEAgLTc0MCw2ICs3NzQsOCBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6b3BfdGhyb3dfaGFuZGxlckdlbmVyYXRvcihWTSYg
dm0pCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKKyNpZiBVU0UoSlNW
QUxVRTY0KQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpjb21waWxlT3BTdHJp
Y3RFcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewpAQCAtNzQ4LDcg
Kzc4NCw4IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUu
bV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMyLCByZWdUMSk7CiAKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgLyogQXQgYSBo
aWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgpAQCAtODMz
LDcgKzg3MCw4IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5
dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjMiwgcmVnVDEpOwogCiAjaWYgVVNFKEJJR0lOVDMyKQogICAgIC8q
IEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToK
QEAgLTEwNDgsNiArMTA4Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0U3RvcmVDZWxs
KGJ5dGVjb2RlLm1fZHN0LCByZWdUMCk7CiB9CiAKKyNlbmRpZgorCiB2b2lkIEpJVDo6ZW1pdF9v
cF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hJbW0+KCk7
CkBAIC0xMDYxLDE2ICsxMTAxLDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBtX3N3aXRjaGVzLmFwcGVu
ZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0
LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRh
YmxlKHVubGlua2VkVGFibGUpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGlu
ZWUsIHJlZ1QwKTsKLSAgICBhdXRvIG5vdEludDMyID0gYnJhbmNoSWZOb3RJbnQzMihyZWdUMCk7
Ci0gICAgc3ViMzIoSW1tMzIodW5saW5rZWRUYWJsZS5tX21pbiksIHJlZ1QwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwganNSZWdUMTApOworICAgIGF1dG8gbm90SW50
MzIgPSBicmFuY2hJZk5vdEludDMyKGpzUmVnVDEwKTsKKyAgICBzdWIzMihJbW0zMih1bmxpbmtl
ZFRhYmxlLm1fbWluKSwganNSZWdUMTAucGF5bG9hZEdQUigpKTsKIAotICAgIGFkZEp1bXAoYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMCwgSW1tMzIobGlua2VkVGFibGUubV9jdGlPZmZzZXRz
LnNpemUoKSkpLCBkZWZhdWx0T2Zmc2V0KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobGlua2Vk
VGFibGUubV9jdGlPZmZzZXRzLmRhdGEoKSksIHJlZ1QxKTsKLSAgICBmYXJKdW1wKEJhc2VJbmRl
eChyZWdUMSwgcmVnVDAsIFNjYWxlUHRyKSwgSlNTd2l0Y2hQdHJUYWcpOworICAgIGFkZEp1bXAo
YnJhbmNoMzIoQWJvdmVPckVxdWFsLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEltbTMyKGxpbmtl
ZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXplKCkpKSwgZGVmYXVsdE9mZnNldCk7CisgICAgbW92ZShU
cnVzdGVkSW1tUHRyKGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5kYXRhKCkpLCByZWdUMik7Cisg
ICAgbG9hZFB0cihCYXNlSW5kZXgocmVnVDIsIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgU2NhbGVQ
dHIpLCByZWdUMik7CisgICAgZmFySnVtcChyZWdUMiwgSlNTd2l0Y2hQdHJUYWcpOwogCiAgICAg
bm90SW50MzIubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhv
cGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsICZ2bSgpLCByZWdUMCwgdGFibGVJ
bmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCAmdm0oKSwganNSZWdU
MTAsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOwogICAgIGZhckp1bXAocmV0dXJu
VmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0KIApAQCAtMTA4OSw5ICsxMTMwLDEzIEBAIHZv
aWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgs
IG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIp
KTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOwotICAgIGxv
YWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIx
LCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKKyAgICB1c2luZyBTbG93T3BlcmF0
aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSk7Cisg
ICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQ
UjxTbG93T3BlcmF0aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBzY3J1dGlu
ZWVKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAxPigpOworCisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHNjcnV0aW5lZUpTUik7CisgICAgbG9h
ZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgZ2xvYmFsT2JqZWN0R1BSLCBzY3J1dGlu
ZWVKU1IsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOwogICAgIGZhckp1bXAocmV0
dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0KIApAQCAtMTEwOCw5ICsxMTUzLDEzIEBA
IHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJ
bmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmlu
ZykpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7Ci0gICAg
bG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50
R1BSMSwgdGFibGVJbmRleCk7CisgICAgdXNpbmcgU2xvd09wZXJhdGlvbiA9IGRlY2x0eXBlKG9w
ZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSk7CisgICAgY29uc3RleHByIEdQ
UlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9u
LCAwPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBzY3J1dGluZWVKU1IgPSBwcmVmZXJy
ZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAxPigpOworCisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzY3J1dGluZWUsIHNjcnV0aW5lZUpTUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChn
bG9iYWxPYmplY3RHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5n
V2l0aFVua25vd25LZXlUeXBlLCBnbG9iYWxPYmplY3RHUFIsIHNjcnV0aW5lZUpTUiwgdGFibGVJ
bmRleCk7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQog
CkBAIC0xMTIwLDE1ICsxMTY5LDE1IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5t
X29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAg
ICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYzEsIGpzUmVnVDEwKTsKKyAgICBKdW1wIGlzSW1tZWRpYXRlID0g
YnJhbmNoSWZOb3RDZWxsKGpzUmVnVDEwKTsKIAotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBl
SW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkp
OworICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVy
bywgQWRkcmVzcyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAgICBtb3Zl
KFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGp1bXAoKTsKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwor
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgcmVnVDIs
IHJlZ1QxKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAg
Y29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CkBAIC0xMTM2LDE0ICsxMTg1
LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIAogICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CiAKLSAgICBhbmQ2
NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21w
YXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVn
VDApOworICAgIGVtaXRUdXJuVW5kZWZpbmVkSW50b051bGwoanNSZWdUMTApOworICAgIGlzTnVs
bChqc1JlZ1QxMCwgcmVnVDApOwogCiAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CiAg
ICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogCi0gICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgYm94Qm9vbGVhbihyZWdUMCwganNSZWdUMTApOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMTUy
LDE1ICsxMjAxLDE1IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBp
c0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMxLCBqc1JlZ1QxMCk7CisgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElm
Tm90Q2VsbChqc1JlZ1QxMCk7CiAKLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICBK
dW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJl
c3MoanNSZWdUMTAucGF5bG9hZEdQUigpLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAgICAgbW92ZShUcnVzdGVk
SW1tMzIoMSksIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSBqdW1wKCk7CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAg
ICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICBlbWl0
TG9hZFN0cnVjdHVyZSh2bSgpLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIHJlZ1QyLCByZWdUMSk7
CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qy
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQ
dHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwpAQCAtMTE2OCwxNiArMTIxNywxOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogCiAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKIAotICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2
NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdU
MCk7CisgICAgZW1pdFR1cm5VbmRlZmluZWRJbnRvTnVsbChqc1JlZ1QxMCk7CisgICAgaXNOb3RO
dWxsKGpzUmVnVDEwLCByZWdUMCk7CiAKICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsK
ICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAKLSAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICBib3hCb29sZWFuKHJlZ1QwLCBqc1JlZ1QxMCk7CisgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGpzUmVnVDEwKTsKIH0KIAorI2lmIFVTRShKU1ZBTFVF
NjQpCisKIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKikKIHsKICAg
ICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIg
Y29uc3RhbnQKQEAgLTEzMDQsMTYgKzEzNTUsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFN0b3Jl
Q2VsbChkc3QsIHJlZ1QwKTsKIH0KIAorI2VuZGlmCisKIHZvaWQgSklUOjplbWl0X29wX3RvX3Ro
aXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwganNSZWdUMTApOwogCi0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoanNSZWdUMTApOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1Qx
LCBGaW5hbE9iamVjdFR5cGUpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUoanNS
ZWdUMTAucGF5bG9hZEdQUigpLCBGaW5hbE9iamVjdFR5cGUpKTsKICAgICBsb2FkMzJGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wVG9UaGlzOjpNZXRhZGF0YTo6b2Zmc2V0T2ZDYWNoZWRTdHJ1Y3R1
cmVJRCgpLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJl
c3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CisgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoanNSZWdUMTAucGF5bG9hZEdQUigp
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMTMyOCw3ICsxMzgxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBSZWdpc3RlcklEIGNhY2hl
ZEZ1bmN0aW9uUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDM7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgY2FsbGVlUmVnKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChjYWxsZWUsIGNhbGxlZVJlZyk7CiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RGdW5jdGlvbihjYWxsZWVSZWcpKTsKICAgICBsb2FkUHRyKEFk
ZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRh
KCkpLCByYXJlRGF0YVJlZyk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCBy
YXJlRGF0YVJlZywgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSkpOwpAQCAt
MTM0Nyw5ICsxNDAwLDEyIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVT
dG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsK
ICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpOworICAgIGJveENlbGwocmVzdWx0UmVnLCBqc1JlZ1QxMCk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwganNSZWdUMTApOwogfQogCisj
aWYgVVNFKEpTVkFMVUU2NCkKKwogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsKQEAgLTE0MDUsNiArMTQ2MSwxNCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0NhcwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRl
c3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKKyNlbmRpZiAvLyBVU0Uo
SlNWQUxVRTY0KQorCit2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJ
bnN0cnVjdGlvbiopCit7CisgICAgLy8gVGhpcyBhbHdheXMgZ29lcyB0byBzbG93IHBhdGggc2lu
Y2Ugd2UgZXhwZWN0IGl0IHRvIGJlIHJhcmUuCisgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKK30K
Kwogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKQEAgLTE0MTUsMTYgKzE0Nzks
MjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFYKICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3Ry
dWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJ
bnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIzKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBHUFJJbmZvOjph
cmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIy
LCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwotICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIs
IEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KKyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0g
ZGVjbHR5cGUob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAw
PigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyB2YWx1ZUpTUiA9IHByZWZlcnJlZEFyZ3Vt
ZW50SlNSPFNsb3dPcGVyYXRpb24sIDE+KCk7CisgICAgY29uc3RleHByIEdQUlJlZyBjb25zdHJ1
Y3RvckdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDI+KCk7CisgICAg
Y29uc3RleHByIEpTVmFsdWVSZWdzIGhhc0luc3RhbmNlVmFsdWVKU1IgPSBwcmVmZXJyZWRBcmd1
bWVudEpTUjxTbG93T3BlcmF0aW9uLCAzPigpOwogCi0jZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUpTUik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlclBheWxvYWQoY29uc3RydWN0b3IsIGNvbnN0cnVjdG9yR1BSKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIGhhc0luc3RhbmNlVmFs
dWVKU1IpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBjYWxs
T3BlcmF0aW9uKAorICAgICAgICBvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLAorICAgICAgICBn
bG9iYWxPYmplY3RHUFIsIHZhbHVlSlNSLCBjb25zdHJ1Y3RvckdQUiwgaGFzSW5zdGFuY2VWYWx1
ZUpTUik7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgcmV0dXJuVmFsdWVKU1IpOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUpTUik7Cit9CiAKIHZv
aWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CkBAIC0xNTg4LDExICsxNjU4LDcgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9u
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7Ci0jZWxzZQotICAg
IGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwotI2VuZGlm
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJn
dW1lbnRHUFIxKTsKICAgICBhdXRvIGNvbnN0YW50ID0gYWRkVG9Db25zdGFudFBvb2woSklUQ29u
c3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkRlY2wsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGlj
X2Nhc3Q8dWludHB0cl90PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKICAgICBsb2FkQ29u
c3RhbnQoY29uc3RhbnQsIGFyZ3VtZW50R1BSMik7CiAKQEAgLTE2MzQsMTIgKzE3MDAsOCBAQCB2
b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Nj
b3BlLCBhcmd1bWVudEdQUjEpOwotI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUu
bV9zY29wZSwgYXJndW1lbnRHUFIxKTsKLSNlbmRpZgogCisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlclBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICAgICBhdXRvIGNv
bnN0YW50ID0gYWRkVG9Db25zdGFudFBvb2woSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlv
bkV4cHIsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihieXRlY29k
ZS5tX2Z1bmN0aW9uRGVjbCkpKTsKICAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQsIGFyZ3VtZW50
R1BSMik7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CkBAIC0xNzAwLDE0
ICsxNzYyLDEyIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1l
bnRHUFIxLCBhcmd1bWVudEdQUjIpOwogI2Vsc2UKICAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRv
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9m
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCByZWdUMik7Ci0gICAgZW1pdExvYWQoc2l6ZUluZGV4
LCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCBy
ZWdUMSwgcmVnVDApOwogICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgcmVnVDMsIHJl
Z1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgogfQogCi0jaWYgVVNFKEpT
VkFMVUU2NCkKLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgbV9pc1NoYXJlYWJsZSA9IGZhbHNlOwpA
QCAtMTcxNyw1NiArMTc3Nyw1NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBUeXBlTG9jYXRpb24qIGNh
Y2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVy
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVnVDApOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIGpzUmVnVDEwKTsKIAog
ICAgIEp1bXBMaXN0IGp1bXBUb0VuZDsKIAotICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZF
bXB0eShyZWdUMCkpOworICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZFbXB0eShqc1JlZ1Qx
MCkpOwogCiAgICAgLy8gQ29tcGlsZSBpbiBhIHByZWRpY3RpdmUgdHlwZSBjaGVjaywgaWYgcG9z
c2libGUsIHRvIHNlZSBpZiB3ZSBjYW4gc2tpcCB3cml0aW5nIHRvIHRoZSBsb2cuCiAgICAgLy8g
VGhlc2UgdHlwZWNoZWNrcyBhcmUgaW5saW5lZCB0byBtYXRjaCB0aG9zZSBvZiB0aGUgNjQtYml0
IEpTVmFsdWUgdHlwZSBjaGVja3MuCiAgICAgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0
U2VlblR5cGUgPT0gVHlwZVVuZGVmaW5lZCkKLSAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFu
Y2hJZlVuZGVmaW5lZChyZWdUMCkpOworICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElm
VW5kZWZpbmVkKGpzUmVnVDEwKSk7CiAgICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5t
X2xhc3RTZWVuVHlwZSA9PSBUeXBlTnVsbCkKLSAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFu
Y2hJZk51bGwocmVnVDApKTsKKyAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZk51bGwo
anNSZWdUMTApKTsKICAgICBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5U
eXBlID09IFR5cGVCb29sZWFuKQotICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmQm9v
bGVhbihyZWdUMCwgcmVnVDEpKTsKKyAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZkJv
b2xlYW4oanNSZWdUMTAsIHJlZ1QyKSk7CiAgICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9u
LT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlQW55SW50KQotICAgICAgICBqdW1wVG9FbmQuYXBwZW5k
KGJyYW5jaElmSW50MzIocmVnVDApKTsKKyAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJ
ZkludDMyKGpzUmVnVDEwKSk7CiAgICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xh
c3RTZWVuVHlwZSA9PSBUeXBlTnVtYmVyKQotICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5j
aElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZOdW1i
ZXIoanNSZWdUMTAsIHJlZ1QyKSk7CiAgICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5t
X2xhc3RTZWVuVHlwZSA9PSBUeXBlU3RyaW5nKSB7Ci0gICAgICAgIEp1bXAgaXNOb3RDZWxsID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJ
ZlN0cmluZyhyZWdUMCkpOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bChqc1JlZ1QxMCk7CisgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZTdHJpbmcoanNS
ZWdUMTAucGF5bG9hZEdQUigpKSk7CiAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwogICAg
IH0KIAogICAgIC8vIExvYWQgdGhlIHR5cGUgcHJvZmlsaW5nIGxvZyBpbnRvIFQyLgogICAgIFR5
cGVQcm9maWxlckxvZyogY2FjaGVkVHlwZVByb2ZpbGVyTG9nID0gbV92bS0+dHlwZVByb2ZpbGVy
TG9nKCk7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVQcm9maWxlckxvZyksIHJl
Z1QyKTsKLSAgICAvLyBMb2FkIHRoZSBuZXh0IGxvZyBlbnRyeSBpbnRvIFQxLgotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMiwgVHlwZVByb2ZpbGVyTG9nOjpjdXJyZW50TG9nRW50cnlPZmZzZXQo
KSksIHJlZ1QxKTsKKyAgICAvLyBMb2FkIHRoZSBuZXh0IGxvZyBlbnRyeSBpbnRvIFQzLgorICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgVHlwZVByb2ZpbGVyTG9nOjpjdXJyZW50TG9nRW50cnlP
ZmZzZXQoKSksIHJlZ1QzKTsKIAogICAgIC8vIFN0b3JlIHRoZSBKU1ZhbHVlIG9udG8gdGhlIGxv
ZyBlbnRyeS4KLSAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBUeXBlUHJvZmlsZXJM
b2c6OkxvZ0VudHJ5Ojp2YWx1ZU9mZnNldCgpKSk7CisgICAgc3RvcmVWYWx1ZShqc1JlZ1QxMCwg
QWRkcmVzcyhyZWdUMywgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6dmFsdWVPZmZzZXQoKSkp
OwogCi0gICAgLy8gU3RvcmUgdGhlIHN0cnVjdHVyZUlEIG9mIHRoZSBjZWxsIGlmIFQwIGlzIGEg
Y2VsbCwgb3RoZXJ3aXNlLCBzdG9yZSAwIG9uIHRoZSBsb2cgZW50cnkuCi0gICAgSnVtcCBub3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwotICAgIHN0b3JlMzIocmVnVDAs
IEFkZHJlc3MocmVnVDEsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpKTsKKyAgICAvLyBTdG9yZSB0aGUgc3RydWN0dXJlSUQgb2YgdGhlIGNlbGwgaWYganNS
ZWdUMTAgaXMgYSBjZWxsLCBvdGhlcndpc2UsIHN0b3JlIDAgb24gdGhlIGxvZyBlbnRyeS4KKyAg
ICBKdW1wIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoanNSZWdUMTApOworICAgIGxvYWQzMihB
ZGRyZXNzKGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVnVDApOworICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDMsIFR5cGVQcm9maWxl
ckxvZzo6TG9nRW50cnk6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKICAgICBKdW1wIHNraXBJc0Nl
bGwgPSBqdW1wKCk7CiAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgIHN0b3JlMzIoVHJ1c3Rl
ZEltbTMyKDApLCBBZGRyZXNzKHJlZ1QxLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5OjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3Mo
cmVnVDMsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsK
ICAgICBza2lwSXNDZWxsLmxpbmsodGhpcyk7CiAKICAgICAvLyBTdG9yZSB0aGUgdHlwZUxvY2F0
aW9uIG9uIHRoZSBsb2cgZW50cnkuCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVM
b2NhdGlvbiksIHJlZ1QwKTsKLSAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBUeXBl
UHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojpsb2NhdGlvbk9mZnNldCgpKSk7CisgICAgc3RvcmVQdHIo
cmVnVDAsIEFkZHJlc3MocmVnVDMsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OmxvY2F0aW9u
T2Zmc2V0KCkpKTsKIAogICAgIC8vIEluY3JlbWVudCB0aGUgY3VycmVudCBsb2cgZW50cnkuCi0g
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeSkp
LCByZWdUMSk7Ci0gICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMiwgVHlwZVByb2ZpbGVy
TG9nOjpjdXJyZW50TG9nRW50cnlPZmZzZXQoKSkpOwotICAgIEp1bXAgc2tpcENsZWFyTG9nID0g
YnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlUHJvZmls
ZXJMb2ctPmxvZ0VuZFB0cigpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoVHlw
ZVByb2ZpbGVyTG9nOjpMb2dFbnRyeSkpLCByZWdUMyk7CisgICAgc3RvcmVQdHIocmVnVDMsIEFk
ZHJlc3MocmVnVDIsIFR5cGVQcm9maWxlckxvZzo6Y3VycmVudExvZ0VudHJ5T2Zmc2V0KCkpKTsK
KyAgICBKdW1wIHNraXBDbGVhckxvZyA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDMsIFRydXN0
ZWRJbW1QdHIoY2FjaGVkVHlwZVByb2ZpbGVyTG9nLT5sb2dFbmRQdHIoKSkpOwogICAgIC8vIENs
ZWFyIHRoZSBsb2cgaWYgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgbG9nLgogICAgIGNhbGxPcGVy
YXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblByb2Nlc3NUeXBlUHJvZmlsZXJMb2csICZ2
bSgpKTsKICAgICBza2lwQ2xlYXJMb2cubGluayh0aGlzKTsKQEAgLTE3NzgsMTMgKzE4MzgsMTMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNo
YWRvd0NoaWNrZW4oKSk7CiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7Ci0gICAgc3RhdGljX2Fz
c2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxs
IGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOworICAgIHN0YXRpY19hc3NlcnQobm9P
dmVybGFwKHJlZ1QwLCBub25BcmdHUFIwLCByZWdUMiksICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMg
aWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlPigpOwogICAgIEdQUlJlZyBzaGFkb3dQ
YWNrZXRSZWcgPSByZWdUMDsKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAv
LyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgR1BSUmVnIHNjcmF0
Y2gyUmVnID0gcmVnVDI7CiAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFk
b3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwogICAgIGxvZ1NoYWRvd0No
aWNrZW5Qcm9sb2d1ZVBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCByZWdUMyk7
CiB9CiAKQEAgLTE3OTIsNyArMTg1Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3df
Y2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2VuKCkpOwogICAgIHVwZGF0ZVRvcENh
bGxGcmFtZSgpOwotICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25B
cmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4i
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChyZWdUMCwgbm9uQXJnR1BSMCwgcmVnVDIp
LCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KG5vT3ZlcmxhcChyZWdUMCwgcmVnVDEsIGpzUmVnVDMyLCByZWdUNCksICJ3ZSB3aWxs
IGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CiAgICAgR1BS
UmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1QwOwogICAgIHsKQEAgLTE4MDAsMTQgKzE4NjEsMTIg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0g
cmVnVDI7CiAgICAgICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFj
a2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwogICAgIH0KLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwganNSZWdUMzIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1Q0KTsKICAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDEpOwotICAgIGxv
Z1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVn
VDIpLCByZWdUMywgcmVnVDEsIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CisgICAg
bG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBqc1JlZ1QzMiwgcmVn
VDQsIHJlZ1QxLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQogCi0jZW5kaWYg
Ly8gVVNFKEpTVkFMVUU2NCkKLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9sX2Zs
b3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBtX2lzU2hh
cmVhYmxlID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAKaW5kZXggZDQ4NDM0Y2VmZmE5ZTUyNzE3NzI5YzM1NDQwNzk1NzhhY2ZlMTc4My4u
NDJhYzEwM2YzZWM2ODRmYjg2YThlMjFjZTM5ZTc3YTFmYzVhNDA4YSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcApAQCAtNTAsNzMgKzUwLDYgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7Ci0g
ICAgCi0gICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpCi0gICAgICAgIGVtaXRTdG9yZShkc3QsIGdl
dENvbnN0YW50T3BlcmFuZChzcmMpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgZW1pdExvYWQoc3Jj
LCByZWdUMSwgcmVnVDApOwotICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwot
ICAgIH0KLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgQVNTRVJUKHJldHVyblZhbHVlR1BSICE9IGNhbGxGcmFt
ZVJlZ2lzdGVyKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEVuZD4oKTsKLSAgICBlbWl0TG9hZChieXRlY29kZS5tX3ZhbHVlLCByZWdUMSwgcmV0dXJuVmFs
dWVHUFIpOwotICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICBlbWl0RnVuY3Rpb25F
cGlsb2d1ZSgpOwotICAgIHJldCgpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qbXAoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEptcD4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX25ld19v
YmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwot
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2Jq
ZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIEFs
bG9jYXRvciBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JOb25WaXJ0dWFsQ29uY3VycmVudGx5PEpT
RmluYWxPYmplY3Q+KCptX3ZtLCBhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxs
b2NhdG9ySWZFeGlzdHMpOwotCi0gICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZXR1cm5WYWx1
ZUdQUjsKLSAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwotICAgIFJlZ2lzdGVy
SUQgc2NyYXRjaFJlZyA9IHJlZ1QzOwotCi0gICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFk
ZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwotICAg
ICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3Rh
bnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1
dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdEluaXRpYWxpemVJ
bmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAg
ICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFN0b3JlQ2VsbChieXRl
Y29kZS5tX2RzdCwgcmVzdWx0UmVnKTsKLSAgICB9Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19v
cF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9w
cm9maWxlZENvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0
aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVj
ayhvcGVyYXRpb25OZXdPYmplY3QsICZ2bSgpLCBzdHJ1Y3R1cmUpOwotICAgIGVtaXRTdG9yZUNl
bGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRl
c19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hh
c0luc3RhbmNlPigpOwpAQCAtMTI0LDEzICs1NywxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVy
cmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3Rv
cjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFz
SW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRMb2FkUGF5bG9hZChoYXNJbnN0YW5jZVZhbHVlLCBy
ZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoaGFzSW5zdGFuY2VWYWx1
ZSwgcmVnVDApOwogICAgIC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5o
YXNJbnN0YW5jZSB3b3VsZCBkby4KICAgICBKdW1wIGhhc0luc3RhbmNlVmFsdWVOb3RDZWxsID0g
ZW1pdEp1bXBJZk5vdEpTQ2VsbChoYXNJbnN0YW5jZVZhbHVlKTsKLSAgICBKdW1wIGN1c3RvbWhh
c0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRy
KG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5z
dGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7Cisg
ICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdU
MCwgQWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX2Z1bmN0
aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKSkpOwogCiAgICAgLy8gV2Uga25vdyB0
aGF0IGNvbnN0cnVjdG9yIGlzIGFuIG9iamVjdCBmcm9tIHRoZSB3YXkgYnl0ZWNvZGUgaXMgZW1p
dHRlZCBmb3IgaW5zdGFuY2VvZiBleHByZXNzaW9ucy4KLSAgICBlbWl0TG9hZFBheWxvYWQoY29u
c3RydWN0b3IsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChjb25z
dHJ1Y3RvciwgcmVnVDApOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBjb25zdHJ1Y3RvciAnSW1wbGVt
ZW50c0RlZmF1bHRIYXNJbnN0YW5jZScgaS5lLiB0aGUgb2JqZWN0IGlzIG5vdCBhIEMtQVBJIHVz
ZXIgbm9yIGEgYm91bmQgZnVuY3Rpb24uCiAgICAgdGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0Rl
ZmF1bHRIYXNJbnN0YW5jZSksIHJlZ1QwKTsKQEAgLTE1OSw4ICs5Myw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICB1c2luZyBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gxR1BSOwogICAg
IHVzaW5nIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDJHUFI7CiAKLSAgICBl
bWl0TG9hZFBheWxvYWQodmFsdWUsIHZhbHVlSlNSLnBheWxvYWRHUFIoKSk7Ci0gICAgZW1pdExv
YWRQYXlsb2FkKHByb3RvLCBwcm90b0pTUi5wYXlsb2FkR1BSKCkpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJQYXlsb2FkKHZhbHVlLCB2YWx1ZUpTUi5wYXlsb2FkR1BSKCkpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKHByb3RvLCBwcm90b0pTUi5wYXlsb2FkR1BSKCkp
OwogCiAgICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBh
IGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0lu
c3RhbmNlLgogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZSk7CkBAIC0xODgs
MTIgKzEyMiw2IEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVzdWx0R1BS
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1
Y3Rpb24qKQotewotICAgIC8vIFRoaXMgYWx3YXlzIGdvZXMgdG8gc2xvdyBwYXRoIHNpbmNlIHdl
IGV4cGVjdCBpdCB0byBiZSByYXJlLgotICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci19Ci0KIHZv
aWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKQEAgLTIxNCwxNSArMTQyLDEyIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTCiAgICAgdXNpbmcgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpw
cm90b0pTUjsKICAgICBzdGF0aWNfYXNzZXJ0KHZhbHVlSlNSID09IHByZWZlcnJlZEFyZ3VtZW50
SlNSPFNsb3dPcGVyYXRpb24sIDI+KCkpOwogICAgIC8vIFByb3RvIHdpbGwgYmUgcGFzc2VkIG9u
IHN0YWNrLCBqdXN0IG1ha2Ugc3VyZSBubyBvdmVybGFwCi0gICAgc3RhdGljX2Fzc2VydCghcHJv
dG9KU1IudXNlcyhnbG9iYWxPYmplY3RHUFIpKTsKLSAgICBzdGF0aWNfYXNzZXJ0KCFwcm90b0pT
Ui51c2VzKHN0dWJJbmZvR1BSKSk7Ci0gICAgc3RhdGljX2Fzc2VydCghdmFsdWVKU1IudXNlcyhn
bG9iYWxPYmplY3RHUFIpKTsKLSAgICBzdGF0aWNfYXNzZXJ0KCF2YWx1ZUpTUi51c2VzKHN0dWJJ
bmZvR1BSKSk7CisgICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAodmFsdWVKU1IsIHByb3RvSlNS
LCBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSKSk7CiAKICAgICBsb2FkR2xvYmFsT2JqZWN0
KGdsb2JhbE9iamVjdEdQUik7CiAgICAgbG9hZENvbnN0YW50KGdlbi5tX3VubGlua2VkU3R1Yklu
Zm9Db25zdGFudEluZGV4LCBzdHViSW5mb0dQUik7Ci0gICAgZW1pdExvYWRUYWcodmFsdWUsIHZh
bHVlSlNSLnRhZ0dQUigpKTsKLSAgICBlbWl0TG9hZFRhZyhwcm90bywgcHJvdG9KU1IudGFnR1BS
KCkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIHZhbHVlSlNSLnRhZ0dQ
UigpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHByb3RvLCBwcm90b0pTUi50YWdH
UFIoKSk7CiAgICAgY2FsbE9wZXJhdGlvbjxTbG93T3BlcmF0aW9uPigKICAgICAgICAgQWRkcmVz
cyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigp
KSwKICAgICAgICAgZHN0LApAQCAtMjMwLDgzICsxNTUsMjUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFMKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0
cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFz
SW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKLQotICAgIGVtaXRM
b2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXRMb2FkUGF5bG9hZChjb25zdHJ1Y3Rv
ciwgcmVnVDIpOwotICAgIGVtaXRMb2FkKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1Q0LCByZWdUMyk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBtX3Byb2ZpbGVk
Q29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgcmVn
VDIsIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMykpOwotICAgIGVtaXRTdG9yZUJvb2woZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7Ci19Ci0gICAgCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0eT4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwogICAgIAotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDAp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxLCByZWdUMCk7CiAgICAg
Y29tcGFyZTMyKEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVU
YWcpLCByZWdUMCk7CiAKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwogfQogCi12b2lk
IEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9v
cGVyYW5kOwotICAgIAotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwotICAgIEp1
bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QxKTsKLQotICAgIGNvbXBhcmUzMihFcXVhbCwg
cmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAg
SnVtcCBkb25lID0ganVtcCgpOwotICAgIAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIEp1
bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7
Ci0gICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotICAgIAotICAg
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCByZWdUMSk7Ci0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1Qw
KTsKLQotICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29w
ZXJhbmQ7Ci0KLSAgICBlbWl0TG9hZFRhZyh2YWx1ZSwgcmVnVDApOwotICAgIHN0YXRpY19hc3Nl
cnQoKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyArIDEgPT0gSlNWYWx1ZTo6TnVsbFRhZykgJiYgKEpT
VmFsdWU6Ok51bGxUYWcgJiAweDEpLCAiIik7Ci0gICAgb3IzMihUcnVzdGVkSW1tMzIoMSksIHJl
Z1QwKTsKLSAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
TnVsbFRhZyksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwotfQotCiB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJc0Jvb2xlYW4+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAK
LSAgICBlbWl0TG9hZFRhZyh2YWx1ZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJUYWcodmFsdWUsIHJlZ1QwKTsKICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIHJlZ1QwKTsKICAgICBlbWl0U3RvcmVCb29sKGRz
dCwgcmVnVDApOwogfQpAQCAtMzE3LDcgKzE4NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX251
bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgCi0gICAgZW1pdExvYWRUYWcodmFsdWUsIHJlZ1Qw
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZhbHVlLCByZWdUMCk7CiAgICAgYWRk
MzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CiAgICAgY29tcGFyZTMyKEJlbG93LCByZWdUMCwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZyArIDEpLCByZWdUMCk7CiAgICAgZW1pdFN0
b3JlQm9vbChkc3QsIHJlZ1QwKTsKQEAgLTMzNiw3ICsyMDMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pc19jZWxsX3dpdGhfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICBp
bnQgdHlwZSA9IGJ5dGVjb2RlLm1fdHlwZTsKIAotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwg
cmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxLCByZWdUMCk7
CiAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwogCiAgICAgY29t
cGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsKQEAgLTM1NSw3ICsyMjIsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdExvYWQodmFs
dWUsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDEsIHJlZ1QwKTsKICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7
CiAKICAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsKQEAg
LTM3NCw3ICsyNDEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3Jj
OwogCi0gICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCByZWdUMSwgcmVnVDApOwogCiAgICAgSnVtcCBpc0ltbSA9IGJyYW5jaElm
Tm90Q2VsbChyZWdUMSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsK
QEAgLTM5MCw3ICsyNTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2Rl
Lm1fc3JjOwogCi0gICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMSwgcmVnVDApOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZTeW1ib2wocmVn
VDApOwpAQCAtNDAxLDExOSArMjY4LDI4IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5
X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBlbWl0
U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVu
Y3Rpb25fbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1l
PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBmdW5jID0gYnl0ZWNvZGUubV9mdW5jdGlvbjsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbmFtZSA9IGJ5dGVjb2RlLm1fbmFtZTsKLSAgICBlbWl0TG9hZFBh
eWxvYWQoZnVuYywgcmVnVDEpOwotICAgIGVtaXRMb2FkKG5hbWUsIHJlZ1QzLCByZWdUMik7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIG1fcHJvZmlsZWRDb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7
Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTm90PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdExv
YWRUYWcoc3JjLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyhzcmMsIHJl
Z1QwKTsKIAotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDEsIHJlZ1QwKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdEJvb2xlYW4ocmVnVDEsIEludmFsaWRHUFJSZWcpKTsKICAgICB4b3IzMihUcnVzdGVkSW1t
MzIoMSksIHJlZ1QwKTsKIAogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCwgKGRzdCA9PSBz
cmMpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKZmFsc2U+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGNvbmQgPSBieXRlY29k
ZS5tX2NvbmRpdGlvbjsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0KLSAgICBlbWl0TG9hZChjb25k
LCByZWdUMSwgcmVnVDApOwotCi0gICAgSlNWYWx1ZVJlZ3MgdmFsdWUocmVnVDEsIHJlZ1QwKTsK
LSAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKLSAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdU
MzsKLSAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0g
ICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gy
LCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1f
cHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
LXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciBjb25kID0gYnl0ZWNvZGUubV9jb25kaXRpb247Ci0gICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwotCi0gICAgZW1pdExvYWQoY29uZCwgcmVnVDEsIHJlZ1QwKTsKLSAg
ICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgSlNW
YWx1ZVJlZ3MgdmFsdWUocmVnVDEsIHJlZ1QwKTsKLSAgICBHUFJSZWcgc2NyYXRjaDEgPSByZWdU
MjsKLSAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKLSAgICBhZGRKdW1wKGJyYW5jaElmVHJ1
dGh5KHZtKCksIHZhbHVlLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0KLSAg
ICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBKdW1wIGlzSW1tZWRpYXRlID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKLQotICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwot
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVz
cyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0
KTsKLSAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwot
Ci0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVs
bAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgc3RhdGljX2Fzc2VydCgoSlNWYWx1
ZTo6VW5kZWZpbmVkVGFnICsgMSA9PSBKU1ZhbHVlOjpOdWxsVGFnKSAmJiAoSlNWYWx1ZTo6TnVs
bFRhZyAmIDB4MSksICIiKTsKLSAgICBvcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAg
IGFkZEp1bXAoYnJhbmNoSWZOdWxsKHJlZ1QxKSwgdGFyZ2V0KTsKLQotICAgIGlzTm90TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0
SXNGb3JlaWduLmxpbmsodGhpcyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51bGw+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotCi0g
ICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwotCi0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7Ci0KLSAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8s
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKLSAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCB3
YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlh
dGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsK
LQotICAgIHN0YXRpY19hc3NlcnQoKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyArIDEgPT0gSlNWYWx1
ZTo6TnVsbFRhZykgJiYgKEpTVmFsdWU6Ok51bGxUYWcgJiAweDEpLCAiIik7Ci0gICAgb3IzMihU
cnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmTm90TnVsbChyZWdU
MSksIHRhcmdldCk7Ci0KLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLX0KLQogdm9p
ZCBKSVQ6OmVtaXRfb3BfanVuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKdW5kZWZpbmVkT3JOdWxsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdExvYWRU
YWcodmFsdWUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZhbHVlLCBy
ZWdUMCk7CiAgICAgc3RhdGljX2Fzc2VydCgoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnICsgMSA9PSBK
U1ZhbHVlOjpOdWxsVGFnKSAmJiAoSlNWYWx1ZTo6TnVsbFRhZyAmIDB4MSksICIiKTsKICAgICBv
cjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoSWZOdWxsKHJl
Z1QwKSwgdGFyZ2V0KTsKQEAgLTUyNSw3ICszMDEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbnVu
ZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAKLSAgICBlbWl0TG9hZFRhZyh2YWx1ZSwgcmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIHJlZ1QwKTsKICAgICBzdGF0aWNfYXNzZXJ0KChKU1Zh
bHVlOjpVbmRlZmluZWRUYWcgKyAxID09IEpTVmFsdWU6Ok51bGxUYWcpICYmIChKU1ZhbHVlOjpO
dWxsVGFnICYgMHgxKSwgIiIpOwogICAgIG9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CiAg
ICAgYWRkSnVtcChicmFuY2hJZk5vdE51bGwocmVnVDApLCB0YXJnZXQpOwpAQCAtNTM1LDEzICsz
MTEsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSmVxUHRyPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5t
X3ZhbHVlOwotICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQo
Ynl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlcik7Ci0gICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlz
Q2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0TG9hZChzcmMsIHJlZ1Qx
LCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QxLCByZWdUMCk7
CiAgICAgSnVtcCBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKLSAgICBhZGRKdW1w
KGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXND
ZWxsKCkpKSwgdGFyZ2V0KTsKKyAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnRQYXlsb2FkKGJ5dGVj
b2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJlZ1QyKTsKKyAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVh
bCwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsKICAgICBub3RDZWxsLmxpbmsodGhpcyk7CiB9CiAK
QEAgLTU0OSwxMyArMzI0LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIEpTVmFsdWUgc3BlY2lhbFBvaW50ZXIgPSBnZXRD
b25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlcik7Ci0gICAgQVNTRVJUKHNw
ZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0
TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMs
IHJlZ1QxLCByZWdUMCk7CiAgICAgSnVtcCBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qx
KTsKLSAgICBKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0
cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpOworICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudFBh
eWxvYWQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDIpOworICAgIEp1bXAgZXF1YWwg
PSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMik7CiAgICAgbm90Q2VsbC5saW5rKHRoaXMp
OwogICAgIHN0b3JlOFRvTWV0YWRhdGEoVHJ1c3RlZEltbTMyKDEpLCBieXRlY29kZSwgT3BKbmVx
UHRyOjpNZXRhZGF0YTo6b2Zmc2V0T2ZIYXNKdW1wZWQoKSk7CiAgICAgYWRkSnVtcChqdW1wKCks
IHRhcmdldCk7CkBAIC01NzAsNyArMzQ0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
MSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUu
bV9yaHM7CiAKLSAgICBlbWl0TG9hZDIoc3JjMSwgcmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywg
cmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDEsIHJlZ1QwKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIHJlZ1QzLCByZWdUMik7CiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMykpOwogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmQ2VsbChyZWdUMSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEJlbG93
LCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKQEAgLTU5NSwxMyAr
MzcwLDE1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5k
KGJyYW5jaElmTm90U3RyaW5nKHJlZ1QyKSk7CiAKICAgICAvLyBTdHJpbmcgY2FzZS4KLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgbV9wcm9maWxlZENvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QwLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIHJlZ1Qx
LCByZWdUMCwgcmVnVDIpOwogICAgIHN0b3JlUmVzdWx0LmFwcGVuZChqdW1wKCkpOwogCiAgICAg
Ly8gR2VuZXJpYyBjYXNlLgogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVy
KSk7IC8vIGRvdWJsZXMKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlRXEsIHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpKTsKIAogICAgIHN0b3JlUmVzdWx0LmxpbmsodGhpcyk7CiAgICAg
ZW1pdFN0b3JlQm9vbChkc3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTYxNCw3ICszOTEsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0TG9hZDIoc3JjMSwg
cmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjMSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YzIsIHJlZ1QzLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QxLCByZWdUMykpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMSkpOwogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKEJlbG93LCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
Okxvd2VzdFRhZykpKTsKQEAgLTYzNCwxNCArNDEyLDE2IEBAIHZvaWQgSklUOjpjb21waWxlT3BF
cUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIENvbXBpbGVP
cEVxCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QyKSk7CiAK
ICAgICAvLyBTdHJpbmcgY2FzZS4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVT
dHJpbmdFcSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QwLCByZWdU
Mik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlU3RyaW5nRXEsIHJlZ1QxLCByZWdUMCwgcmVnVDIpOwogICAgIGVtaXRKdW1w
U2xvd1RvSG90KGJyYW5jaFRlc3QzMih0eXBlID09IENvbXBpbGVPcEVxVHlwZTo6RXEgPyBOb25a
ZXJvIDogWmVybywgcmV0dXJuVmFsdWVHUFIpLCBqdW1wVGFyZ2V0KTsKICAgICBkb25lLmFwcGVu
ZChqdW1wKCkpOwogCiAgICAgLy8gR2VuZXJpYyBjYXNlLgogICAgIGdlbmVyaWNDYXNlLmFwcGVu
ZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMKICAgICBnZW5lcmljQ2FzZS5saW5rKHRo
aXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBtX3Byb2ZpbGVkQ29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dU
b0hvdChicmFuY2hUZXN0MzIodHlwZSA9PSBDb21waWxlT3BFcVR5cGU6OkVxID8gTm9uWmVybyA6
IFplcm8sIHJldHVyblZhbHVlR1BSKSwganVtcFRhcmdldCk7CiAKICAgICBkb25lLmxpbmsodGhp
cyk7CkBAIC02NjEsNyArNDQxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBi
eXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhz
OwogCi0gICAgZW1pdExvYWQyKHNyYzEsIHJlZ1QxLCByZWdUMCwgc3JjMiwgcmVnVDMsIHJlZ1Qy
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QxLCByZWdUMCk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCByZWdUMywgcmVnVDIpOwogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkNlbGwocmVnVDEpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywgcmVn
VDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CkBAIC02ODYsMTMgKzQ2Nywx
NSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZQogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFu
Y2hJZk5vdFN0cmluZyhyZWdUMikpOwogCiAgICAgLy8gU3RyaW5nIGNhc2UuCi0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCByZWdUMSwgcmVn
VDAsIHJlZ1QyKTsKICAgICBzdG9yZVJlc3VsdC5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIEdl
bmVyaWMgY2FzZS4KICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAv
LyBkb3VibGVzCiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVFcSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZUVxLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QyKSk7CiAKICAgICBzdG9yZVJlc3VsdC5saW5rKHRoaXMpOwogICAgIHhvcjMy
KFRydXN0ZWRJbW0zMigweDEpLCByZXR1cm5WYWx1ZUdQUik7CkBAIC03MDYsNyArNDg5LDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRMb2FkMihzcmMx
LCByZWdUMSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMxLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDEsIHJlZ1QzKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QxKSk7CiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6TG93ZXN0VGFnKSkpOwpAQCAtNzI5LDcgKzUxMyw4IEBAIHZvaWQgSklUOjpjb21waWxlT3BT
dHJpY3RFcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YzIgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRMb2FkMihzcmMxLCByZWdUMSwgcmVnVDAs
IHNyYzIsIHJlZ1QzLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBy
ZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgcmVnVDMsIHJl
Z1QyKTsKIAogICAgIC8vIEJhaWwgaWYgdGhlIHRhZ3MgZGlmZmVyLCBvciBhcmUgZG91YmxlLgog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKQEAgLTc2
OSwxMSArNTU0LDEyIEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9
IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9y
aHM7CiAKLSAgICBlbWl0TG9hZDIoc3JjMSwgcmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVn
VDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDEsIHJlZ1QwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIHJlZ1QzLCByZWdUMik7CiAKICAgICAvLyBC
YWlsIGlmIHRoZSB0YWdzIGRpZmZlciwgb3IgYXJlIGRvdWJsZS4KICAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoQmVsb3csIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKEJlbG93LCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
Okxvd2VzdFRhZykpKTsKIAogICAgIC8vIEp1bXAgdG8gYSBzbG93IGNhc2UgaWYgYm90aCBhcmUg
c3RyaW5ncyBvciBzeW1ib2xzIChub24gb2JqZWN0KS4KICAgICBKdW1wIG5vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDEpOwpAQCAtODA1LDcgKzU5MSw4IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpz
dHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlU3RyaWN0RXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVTdHJpY3RFcSwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3Qz
MihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKQEAgLTgxNSw5MSArNjAy
LDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX3Byb2ZpbGVk
Q29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1Q0LCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0
SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQp
OwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BFcU51bGw+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0KLSAg
ICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMSk7Ci0KLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDEpOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5s
aW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFy
ZTMyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0
ZSA9IGp1bXAoKTsKLQotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0KLSAgICBjb21wYXJl
MzIoRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZyksIHJlZ1QyKTsK
LSAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgcmVnVDEpOwotICAgIG9yMzIocmVnVDIsIHJlZ1QxKTsKLQotICAgIHdhc05vdElt
bWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGlu
ayh0aGlzKTsKLQotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMSk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Ci17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxs
PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdExvYWQoc3Jj
LCByZWdUMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDEpOwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0
OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVk
SW1tMzIoMSksIHJlZ1QxKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6
Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihOb3RFcXVhbCwg
cmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7
Ci0KLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotCi0gICAgY29tcGFyZTMyKE5vdEVxdWFs
LCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpLCByZWdUMik7Ci0gICAgY29t
cGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRh
ZyksIHJlZ1QxKTsKLSAgICBhbmQzMihyZWdUMiwgcmVnVDEpOwotCi0gICAgd2FzTm90SW1tZWRp
YXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOwotCi0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRocm93PigpOwotICAg
IEFTU0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7Ci0gICAgY29weUNhbGxlZVNhdmVzVG9F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKLSAgICBlbWl0
TG9hZChieXRlY29kZS5tX3ZhbHVlLCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25O
b0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7Ci0gICAganVtcFRvRXhjZXB0
aW9uSGFuZGxlcih2bSgpKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDEsIHJlZ1QwKTsKIAogICAgIEp1bXAgaXNJ
bnQzMiA9IGJyYW5jaElmSW50MzIocmVnVDEpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFi
b3ZlT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CkBA
IC05MTcsNyArNjMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtZXJpYyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBi
eXRlY29kZS5tX29wZXJhbmQ7CiAgICAgSlNWYWx1ZVJlZ3MgYXJndW1lbnRWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKTsKIAotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDEsIHJlZ1QwKTsKIAogICAgIEp1bXAgaXNOb3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dEhlYXBCaWdJbnQocmVnVDApKTsKQEAgLTkzOCw3ICs2NTIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF90b19zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDEsIHJlZ1QwKTsKIAog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMSkpOwogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CkBAIC05NTMsNyArNjY3LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0TG9hZChzcmMsIHJl
Z1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QxLCByZWdU
MCk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwpAQCAtMTAyNSw3NCArNzM5LDExIEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBjdXJyZW50
U2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIGVtaXRMb2FkUGF5bG9hZChjdXJyZW50U2Nv
cGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChjdXJyZW50U2Nv
cGUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9m
TmV4dCgpKSwgcmVnVDApOwogICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3QsIHJlZ1Qw
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wU3dpdGNoSW1tPigpOwotICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNv
ZGUubV90YWJsZUluZGV4OwotICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7Ci0KLSAgICAvLyBj
cmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0
Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtl
ZFRhYmxlID0gbV9wcm9maWxlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVt
cFRhYmxlc1t0YWJsZUluZGV4XTsKLSAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQo
dGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6
OkltbWVkaWF0ZSkpOwotICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFi
bGUpOwotCi0gICAgZW1pdExvYWQoc2NydXRpbmVlLCByZWdUMSwgcmVnVDApOwotICAgIGF1dG8g
bm90SW50MzIgPSBicmFuY2hJZk5vdEludDMyKHJlZ1QxKTsKLSAgICBzdWIzMihJbW0zMih1bmxp
bmtlZFRhYmxlLm1fbWluKSwgcmVnVDApOwotCi0gICAgYWRkSnVtcChicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHJlZ1QwLCBJbW0zMihsaW5rZWRUYWJsZS5tX2N0aU9mZnNldHMuc2l6ZSgpKSksIGRl
ZmF1bHRPZmZzZXQpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihsaW5rZWRUYWJsZS5tX2N0aU9m
ZnNldHMuZGF0YSgpKSwgcmVnVDEpOwotICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QxLCByZWdU
MCwgU2NhbGVQdHIpLCByZWdUMSk7Ci0gICAgZmFySnVtcChyZWdUMSwgTm9QdHJUYWcpOwotCi0g
ICAgbm90SW50MzIubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVj
ayhvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsICZ2bSgpLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKLSAgICBm
YXJKdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29w
X3N3aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hDaGFyPigp
OwotICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwotICAgIHVu
c2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0g
Ynl0ZWNvZGUubV9zY3J1dGluZWU7Ci0KLSAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dp
dGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0
IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9wcm9maWxlZENvZGVC
bG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVt
cFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKLSAg
ICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUlu
ZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwotICAgIGxpbmtl
ZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwotCi0gICAgZW1pdExvYWQoc2Ny
dXRpbmVlLCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNo
Q2hhcldpdGhVbmtub3duS2V5VHlwZSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUu
bV9taW4pOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wU3dpdGNoU3RyaW5nPigpOwotICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUubV90
YWJsZUluZGV4OwotICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7Ci0KLSAgICAvLyBjcmVhdGUg
anVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3Rh
dGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxl
ID0gbV9wcm9maWxlZENvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKLSAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hS
ZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hS
ZWNvcmQ6OlN0cmluZykpOwotICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2Vk
VGFibGUpOwotCi0gICAgZW1pdExvYWQoc2NydXRpbmVlLCByZWdUMSwgcmVnVDApOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBtX3By
b2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOwot
fQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCk7CkBAIC0xMTAw
LDcgKzc1MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgLy8gRXZlbiB0aG91Z2ggSklUIGNvZGUgZG9lc24ndCB1
c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8g
emFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAg
ICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNW
aXJ0dWFsUmVnaXN0ZXJzKCk7IGkgPCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5udW1WYXJzKCk7ICsr
aSkKKyAgICBzaXplX3QgY291bnQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5udW1WYXJzKCk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFj
ZUFzVmlydHVhbFJlZ2lzdGVycygpOyBpIDwgY291bnQ7ICsraSkKICAgICAgICAgZW1pdFN0b3Jl
KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpJVFNs
b3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3Bh
dGhfZW50ZXIpOwpAQCAtMTExNiwxNjQgKzc2OCwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0U3Rv
cmVDZWxsKGRzdCwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwotICAgIFZp
cnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKLSAgICBXcml0ZUJhcnJp
ZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2FsbGVl
OwotICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCByYXJl
RGF0YVJlZyA9IHJlZ1Q0OwotICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7Ci0gICAg
UmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIHN0cnVjdHVy
ZVJlZyA9IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgY2FjaGVkRnVuY3Rpb25SZWcgPSByZWdUNDsK
LSAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMzsKLQotICAgIGVtaXRMb2FkUGF5bG9h
ZChjYWxsZWUsIGNhbGxlZVJlZyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RGdW5jdGlv
bihjYWxsZWVSZWcpKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0aW9u
OjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCByYXJlRGF0YVJlZyk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByYXJlRGF0YVJlZywgVHJ1c3RlZEltbTMyKEpT
RnVuY3Rpb246OnJhcmVEYXRhVGFnKSkpOwotICAgIGxvYWQzMihBZGRyZXNzKHJhcmVEYXRhUmVn
LCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mQWxsb2NhdG9yKCkg
LSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIGFsbG9jYXRvclJlZyk7Ci0gICAgbG9hZFB0cihB
ZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9j
YXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6Om9m
ZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIHN0cnVjdHVyZVJl
Zyk7Ci0KLSAgICBsb2FkUHRyKGNhY2hlZEZ1bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7Ci0g
ICAgSnVtcCBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzID0gYnJhbmNoUHRyKEVxdWFsLCBjYWNoZWRG
dW5jdGlvblJlZywgVHJ1c3RlZEltbVB0cihKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVj
dHMoKSkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgY2FsbGVlUmVnLCBj
YWNoZWRGdW5jdGlvblJlZykpOwotICAgIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMubGluayh0aGlz
KTsKLQotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0
ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBK
SVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBidXR0
ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Ci0gICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1
cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwot
ICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwot
ICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5t
X2RzdCwgcmVzdWx0UmVnKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlSUQq
IGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlSUQ7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdpc3RlciA9IGJ5dGVjb2RlLm1fc3JjRHN0OwotCi0gICAg
ZW1pdExvYWQodGhpc1JlZ2lzdGVyLCByZWdUMywgcmVnVDIpOwotCi0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RDZWxsKHJlZ1QzKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBl
KHJlZ1QyLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBsb2FkMzIoY2FjaGVkU3Ry
dWN0dXJlSUQsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIHJl
Z1QwLCByZWdUMikpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6PigpOwotICAgIGVtaXRMb2FkVGFnKGJ5dGVj
b2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlclRhZyhieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRf
b3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17
Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlw
ZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRD
b2RlQmxvY2spOwotICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRh
dGEubV90eXBlTG9jYXRpb247Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0g
Ynl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7Ci0KLSAgICAvLyBMb2FkIHBheWxvYWQg
aW4gVDAuIExvYWQgdGFnIGluIFQzLgotICAgIGVtaXRMb2FkUGF5bG9hZCh2YWx1ZVRvUHJvZmls
ZSwgcmVnVDApOwotICAgIGVtaXRMb2FkVGFnKHZhbHVlVG9Qcm9maWxlLCByZWdUMyk7Ci0KLSAg
ICBKdW1wTGlzdCBqdW1wVG9FbmQ7Ci0KLSAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmRW1w
dHkocmVnVDMpKTsKLQotICAgIC8vIENvbXBpbGUgaW4gYSBwcmVkaWN0aXZlIHR5cGUgY2hlY2ss
IGlmIHBvc3NpYmxlLCB0byBzZWUgaWYgd2UgY2FuIHNraXAgd3JpdGluZyB0byB0aGUgbG9nLgot
ICAgIC8vIFRoZXNlIHR5cGVjaGVja3MgYXJlIGlubGluZWQgdG8gbWF0Y2ggdGhvc2Ugb2YgdGhl
IDMyLWJpdCBKU1ZhbHVlIHR5cGUgY2hlY2tzLgotICAgIGlmIChjYWNoZWRUeXBlTG9jYXRpb24t
Pm1fbGFzdFNlZW5UeXBlID09IFR5cGVVbmRlZmluZWQpCi0gICAgICAgIGp1bXBUb0VuZC5hcHBl
bmQoYnJhbmNoSWZVbmRlZmluZWQocmVnVDMpKTsKLSAgICBlbHNlIGlmIChjYWNoZWRUeXBlTG9j
YXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVOdWxsKQotICAgICAgICBqdW1wVG9FbmQuYXBw
ZW5kKGJyYW5jaElmTnVsbChyZWdUMykpOwotICAgIGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlv
bi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZUJvb2xlYW4pCi0gICAgICAgIGp1bXBUb0VuZC5hcHBl
bmQoYnJhbmNoSWZCb29sZWFuKHJlZ1QzLCBJbnZhbGlkR1BSUmVnKSk7Ci0gICAgZWxzZSBpZiAo
Y2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlQW55SW50KQotICAgICAg
ICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmSW50MzIocmVnVDMpKTsKLSAgICBlbHNlIGlmIChj
YWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVOdW1iZXIpIHsKLSAgICAg
ICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZk51bWJlcihKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDApLCByZWdUMSkpOwotICAgIH0gZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RT
ZWVuVHlwZSA9PSBUeXBlU3RyaW5nKSB7Ci0gICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QzKTsKLSAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZlN0cmlu
ZyhyZWdUMCkpOwotICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICB9Ci0KLSAgICAv
LyBMb2FkIHRoZSB0eXBlIHByb2ZpbGluZyBsb2cgaW50byBUMi4KLSAgICBUeXBlUHJvZmlsZXJM
b2cqIGNhY2hlZFR5cGVQcm9maWxlckxvZyA9IG1fdm0tPnR5cGVQcm9maWxlckxvZygpOwotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlUHJvZmlsZXJMb2cpLCByZWdUMik7Ci0KLSAg
ICAvLyBMb2FkIHRoZSBuZXh0IGxvZyBlbnRyeSBpbnRvIFQxLgotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMiwgVHlwZVByb2ZpbGVyTG9nOjpjdXJyZW50TG9nRW50cnlPZmZzZXQoKSksIHJlZ1Qx
KTsKLQotICAgIC8vIFN0b3JlIHRoZSBKU1ZhbHVlIG9udG8gdGhlIGxvZyBlbnRyeS4KLSAgICBz
dG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojp2
YWx1ZU9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQp
KSk7Ci0gICAgc3RvcmUzMihyZWdUMywgQWRkcmVzcyhyZWdUMSwgVHlwZVByb2ZpbGVyTG9nOjpM
b2dFbnRyeTo6dmFsdWVPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy50YWcpKSk7Ci0KLSAgICAvLyBTdG9yZSB0aGUgc3RydWN0dXJlSUQgb2YgdGhlIGNlbGwgaWYg
YXJndW1lbnQgaXMgYSBjZWxsLCBvdGhlcndpc2UsIHN0b3JlIDAgb24gdGhlIGxvZyBlbnRyeS4K
LSAgICBKdW1wIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDMpOwotICAgIGxvYWQzMihB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAg
c3RvcmUzMihyZWdUMCwgQWRkcmVzcyhyZWdUMSwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6
c3RydWN0dXJlSURPZmZzZXQoKSkpOwotICAgIEp1bXAgc2tpcE5vdENlbGwgPSBqdW1wKCk7Ci0g
ICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBBZGRy
ZXNzKHJlZ1QxLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSk7Ci0gICAgc2tpcE5vdENlbGwubGluayh0aGlzKTsKLQotICAgIC8vIFN0b3JlIHRoZSB0eXBl
TG9jYXRpb24gb24gdGhlIGxvZyBlbnRyeS4KLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY2FjaGVk
VHlwZUxvY2F0aW9uKSwgcmVnVDApOwotICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDEs
IFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OmxvY2F0aW9uT2Zmc2V0KCkpKTsKLQotICAgIC8v
IEluY3JlbWVudCB0aGUgY3VycmVudCBsb2cgZW50cnkuCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzaXplb2YoVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeSkpLCByZWdUMSk7Ci0gICAgc3RvcmUz
MihyZWdUMSwgQWRkcmVzcyhyZWdUMiwgVHlwZVByb2ZpbGVyTG9nOjpjdXJyZW50TG9nRW50cnlP
ZmZzZXQoKSkpOwotICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdU
MSwgVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlUHJvZmlsZXJMb2ctPmxvZ0VuZFB0cigpKSkpOwot
ICAgIC8vIENsZWFyIHRoZSBsb2cgaWYgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgbG9nLgotICAg
IGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblByb2Nlc3NUeXBlUHJvZmls
ZXJMb2csICZ2bSgpKTsKLQotICAgIGp1bXBUb0VuZC5saW5rKHRoaXMpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0No
aWNrZW4oKSk7Ci0gICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7Ci0gICAgc3RhdGljX2Fzc2VydChu
b25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUg
cHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlPigpOwotICAgIEdQUlJl
ZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25B
cmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCi0gICAgR1BS
UmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2
bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Ci0KLSAgICBz
Y3JhdGNoMVJlZyA9IHJlZ1Q0OwotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3Bl
LCByZWdUMyk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KHNoYWRvd1BhY2tl
dFJlZywgc2NyYXRjaDFSZWcsIHJlZ1QzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3No
YWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
LXsKLSAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4oKSk7Ci0gICAgdXBkYXRl
VG9wQ2FsbEZyYW1lKCk7Ci0gICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYm
IG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0
cnVlLiIpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9n
U2hhZG93Q2hpY2tlblRhaWw+KCk7Ci0gICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1Qw
OwotICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBh
IG5vbi1hcmd1bWVudCByZWdpc3Rlci4KLSAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsK
LSAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2Ny
YXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV90
aGlzVmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0TG9hZFRhZyhieXRlY29kZS5tX3RoaXNWYWx1ZSwg
cmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHRoaXNSZWdzKHJlZ1QxLCByZWdUMik7Ci0gICAgZW1p
dExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlj
a2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCByZWdUMywgVHJ1c3RlZElt
bVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApp
bmRleCA5NTc2OTViMzBlOTM5OWJiYTBlMzBmMmVmZjQ5MGQzMGZiNjdjYjVmLi5mMDJmNGFhNTlk
OTZhZTE1NTVlYTMyZWMxYTJmNTE3MDVmNGIxZTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAtNzc1LDE0ICs3NzUsMTIgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcHV0X3ByaXZh
dGVfbmFtZV9wcmVwYXJlQ2FsbEcKIH0KICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0KIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5SWQ+KCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAg
ICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwogICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQpAQCAtNzkwLDkg
Kzc4OCw5IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5SWQ+KCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAg
ICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDEpOwogICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0
dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQpAQCAtODAwLDEw
ICs3OTgsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRl
cl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlclNl
dHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Us
IHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChieXRlY29kZS5tX2Jh
c2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRl
czsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdU
MSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUubV9zZXR0ZXIs
IHJlZ1QyKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDMsIHJlZ1QwLCBtX3VubGlua2VkQ29kZUJs
b2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCBy
ZWdUMSwgcmVnVDIpOwogfQpAQCAtODExLDI2ICs4MDksNDAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeVZhbD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOworCisgICAgdXNpbmcgU2xvd09wZXJhdGlv
biA9IGRlY2x0eXBlKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsKTsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIGdsb2JhbE9iamVjdEdSUCA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24s
IDA+KCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcHJlZmVycmVkQXJndW1lbnRH
UFI8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcHJvcGVy
dHlKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAyPigpOworICAgIC8v
IEF0dHJpYnV0ZXMgaW4gYXJndW1lbnQgMworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2V0dGVyR1BS
ID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgND4oKTsKKworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fYmFzZSwgYmFzZUdQUik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBwcm9wZXJ0eUpTUik7
CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChieXRlY29kZS5tX2FjY2Vzc29yLCBzZXR0ZXJH
UFIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1JQKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBnbG9iYWxPYmplY3RHUlAsIGJhc2VHUFIs
IHByb3BlcnR5SlNSLCBhdHRyaWJ1dGVzLCBzZXR0ZXJHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
U2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jh
c2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdU
Mik7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRTZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVn
VDIpOwotfQogCi0jZW5kaWYKKyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3Bl
cmF0aW9uUHV0U2V0dGVyQnlWYWwpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0
R1JQID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4oKTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9u
LCAxPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBwcm9wZXJ0eUpTUiA9IHByZWZlcnJl
ZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDI+KCk7CisgICAgLy8gQXR0cmlidXRlcyBpbiBh
cmd1bWVudCAzCisgICAgY29uc3RleHByIEdQUlJlZyBzZXR0ZXJHUFIgPSBwcmVmZXJyZWRBcmd1
bWVudEdQUjxTbG93T3BlcmF0aW9uLCA0PigpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
clBheWxvYWQoYnl0ZWNvZGUubV9iYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHByb3BlcnR5SlNSKTsKKyAgICBpbnQzMl90IGF0
dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlclBheWxvYWQoYnl0ZWNvZGUubV9hY2Nlc3Nvciwgc2V0dGVyR1BSKTsKKyAgICBsb2FkR2xv
YmFsT2JqZWN0KGdsb2JhbE9iamVjdEdSUCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRTZXR0ZXJCeVZhbCwgZ2xvYmFsT2JqZWN0R1JQLCBiYXNlR1BSLCBwcm9wZXJ0eUpTUiwgYXR0
cmlidXRlcywgc2V0dGVyR1BSKTsKK30KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CkBAIC0xOTU4LDEzMCArMTk3
MCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJpdmF0ZV9icmFuZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWCiAgICAgZW1pdEhhc1ByaXZhdGVTbG93KGJ5
dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fYnJhbmQsIEFjY2Vzc1R5
cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotCi12b2lkIEpJ
VDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpCi17
Ci0gICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKLX0KLQotCi0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQot
dm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUmVzb2x2ZVNjb3BlPigpOwotICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5
cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX3Jlc29sdmVUeXBl
OwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotCi0gICAgY29uc3RleHByIEdQUlJl
ZyBzY29wZUdQUiA9IHJlZ1QwOwotCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2U7Ci0KLSAgICBhdXRv
IGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3Ms
IEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBJbnZhbGlkR1BSUmVnKSB7Ci0gICAgICAgIGlmICgh
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlm
IChnbG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQUlJlZykgewotICAgICAgICAgICAgZ2xvYmFs
T2JqZWN0R1BSID0gcmVnVDQ7Ci0gICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9i
amVjdEdQUik7Ci0gICAgICAgIH0KLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGdsb2JhbE9iamVj
dEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNo
cG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoOChFcXVhbCwg
QWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdFJlc29sdmVDbG9z
dXJlID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7Ci0gICAgICAgIGRvVmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBsb2FkMzJG
cm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZM
b2NhbFNjb3BlRGVwdGgoKSwgcmVnVDEpOwotCi0gICAgICAgIEFTU0VSVChzY29wZUdQUiA9PSBy
ZWdUMCk7Ci0gICAgICAgIExhYmVsIGxvb3AgPSBsYWJlbCgpOwotICAgICAgICBKdW1wIGRvbmUg
PSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgICAgICBzdWIzMihUcnVz
dGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICAgICAganVtcCgpLmxpbmtUbyhsb29wLCB0aGlzKTsK
LSAgICAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIH07Ci0KLSAgICBhdXRvIGVtaXRDb2RlID0g
WyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewotICAgICAgICBzd2l0Y2ggKHJlc29sdmVU
eXBlKSB7Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICAvLyBKU1Njb3Bl
Ojpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKS4KLSAgICAgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwotICAgICAgICAgICAg
ZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSks
IHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BSZXNv
bHZlU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSwg
cmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBB
ZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGlu
Z0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAg
ICAgICBjYXNlIEdsb2JhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6Ci0gICAgICAgIGNhc2Ug
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIC8v
IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpIGZvciBHbG9iYWxWYXIqLAotICAgICAgICAgICAgLy8gYW5kIGNvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpIGZvciBHbG9iYWxM
ZXhpY2FsVmFyKi4KLSAgICAgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwotICAgICAg
ICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhp
Y2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKQotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxP
YmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBl
bWl0UmVzb2x2ZUNsb3N1cmUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFJlc29sdmVkQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAgICAgIGNh
c2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBl
ID09IE1vZHVsZVZhcikgCi0gICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
UmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZMZXhpY2FsRW52aXJvbm1lbnQoKSwgcmVn
VDApOwotICAgIGVsc2UgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBz
Y29wZUdQUik7Ci0gICAgICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIg
fHwgcHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykKLSAgICAgICAgICAgIGVtaXRDb2RlKHByb2ZpbGVkUmVzb2x2ZVR5cGUpOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BS
KTsKLQotICAgICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICAgICAgbG9hZDMy
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9m
UmVzb2x2ZVR5cGUoKSwgcmVnVDEpOwotCi0gICAgICAgICAgICBhdXRvIGVtaXRDYXNlID0gWyZd
IChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewotICAgICAgICAgICAgICAgIEp1bXAgbm90Q2Fz
ZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7
Ci0gICAgICAgICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICAgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgICAgICAgICBub3RDYXNlLmxpbmso
dGhpcyk7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXIp
OwotICAgICAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHkpOwotICAgICAgICAgICAgZW1p
dENhc2UoR2xvYmFsTGV4aWNhbFZhcik7Ci0gICAgICAgICAgICBlbWl0Q2FzZShHbG9iYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgICAgICBlbWl0Q2FzZShHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoanVtcCgpKTsKLQotICAgICAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZSk7Ci0KLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19Ci0KLSNlbHNlCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNv
bHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7
CkBAIC0yMDk0LDIxICsxOTgyLDIwIEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBBU1NFUlQoQnl0ZWNv
ZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29kZUluZGV4KTsKICAgICBBU1NFUlQo
bV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdChtX2J5dGVjb2RlSW5kZXgpID09IGN1
cnJlbnRJbnN0cnVjdGlvbik7CiAKLSAgICAvLyBJZiB3ZSBwcm9maWxlIGNlcnRhaW4gcmVzb2x2
ZSB0eXBlcywgd2UncmUgZ2F1cmFudGVlZCBhbGwgbGlua2VkIGNvZGUgd2lsbCBoYXZlIHRoZSBz
YW1lCisgICAgLy8gSWYgd2UgcHJvZmlsZSBjZXJ0YWluIHJlc29sdmUgdHlwZXMsIHdlJ3JlIGd1
YXJhbnRlZWQgYWxsIGxpbmtlZCBjb2RlIHdpbGwgaGF2ZSB0aGUgc2FtZQogICAgIC8vIHJlc29s
dmUgdHlwZS4KIAogICAgIGlmIChwcm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgCi0g
ICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZMZXhpY2FsRW52aXJvbm1lbnQoKSwgcmVnVDApOworICAgICAgICBsb2Fk
UHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNl
dE9mTGV4aWNhbEVudmlyb25tZW50KCksIHJldHVyblZhbHVlR1BSKTsKICAgICBlbHNlIHsKICAg
ICAgICAgdWludDMyX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRh
ZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAKICAgICAgICAgY29uc3Rl
eHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1QyOwogICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IHNjb3BlR1BSID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZz
ZXRHUFIgPSByZWdUNTsKKyAgICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQ
UiA9IHJlZ1QzOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3Bl
R1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoc2NvcGUsIHNjb3Bl
R1BSKTsKICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtZXRhZGF0YU9mZnNldCksIHNfbWV0
YWRhdGFHUFIsIG1ldGFkYXRhR1BSKTsKLQogICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRl
Y29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAogICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CkBAIC0yMTM0LDcgKzIwMjEsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKGNvZGUucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKICAgICB9CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgYm94Q2VsbChyZXR1cm5WYWx1ZUdQUiwgcmV0dXJuVmFsdWVKU1IpOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUpTUik7CiB9CiAKIHRlbXBsYXRlIDxSZXNv
bHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlPgpAQCAtMjE1MCw4ICsyMDM4LDExIEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNj
b3BlVGh1bmsoVk0mIHZtKQogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BSZXNvbHZlU2NvcGU6Ok1l
dGFkYXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUMjsgLy8gaW5j
b21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7IC8vIGluY29taW5n
Ci0gICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OyAvLyBpbmNv
bWluZyAtIHBhc3MgdGhydSB0byBzbG93IHBhdGguCisgICAgY29uc3RleHByIEdQUlJlZyBieXRl
Y29kZU9mZnNldEdQUiA9IHJlZ1QzOyAvLyBpbmNvbWluZyAtIHBhc3MgdGhydSB0byBzbG93IHBh
dGguCisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDU7IC8vIGxvY2FsIHRl
bXBvcmFyeQogICAgIFVOVVNFRF9QQVJBTShieXRlY29kZU9mZnNldEdQUik7CisgICAgc3RhdGlj
X2Fzc2VydChub092ZXJsYXAocmV0dXJuVmFsdWVHUFIsIG1ldGFkYXRhR1BSLCBieXRlY29kZU9m
ZnNldEdQUiwgc2NyYXRjaEdQUikpOworICAgIHN0YXRpY19hc3NlcnQoc2NvcGVHUFIgPT0gcmV0
dXJuVmFsdWVHUFIpOyAvLyBlbWl0UmVzb2x2ZUNsb3N1cmUgYXNzdW1lcyB0aGlzCiAKICAgICBq
aXQudGFnUmV0dXJuQWRkcmVzcygpOwogCkBAIC0yMTYxLDIzICsyMDUyLDIzIEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3Bl
VGh1bmsoVk0mIHZtKQogICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0R1BSID09IEludmFsaWRH
UFJSZWcpIHsKLSAgICAgICAgICAgIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OwotICAgICAgICAg
ICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9m
ZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgICAgICAgICAgZ2xv
YmFsT2JqZWN0R1BSID0gc2NyYXRjaEdQUjsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICBqaXQubG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9i
YWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAgICAgIH0KLSAgICAgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9i
amVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0
OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihK
U0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRj
aEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52
YWxpZGF0ZWQpKSk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1pdFJlc29sdmVDbG9zdXJlID0gWyZd
IChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CiAgICAgICAgIGRvVmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBqaXQubG9hZDMyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkxvY2FsU2NvcGVEZXB0aCgpKSwgcmVn
VDEpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChzY29wZUdQUiA9PSByZWdUMCk7CisgICAgICAg
IGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mTG9jYWxT
Y29wZURlcHRoKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NvcGVH
UFIgPT0gcmV0dXJuVmFsdWVHUFIpOwogCiAgICAgICAgIExhYmVsIGxvb3AgPSBqaXQubGFiZWwo
KTsKLSAgICAgICAgSnVtcCBkb25lID0gaml0LmJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSk7Ci0g
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgp
KSwgcmVnVDApOwotICAgICAgICBqaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7Cisg
ICAgICAgIEp1bXAgZG9uZSA9IGppdC5icmFuY2hUZXN0MzIoWmVybywgc2NyYXRjaEdQUik7Cisg
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmV0dXJuVmFsdWVHUFIsIEpTU2NvcGU6Om9mZnNl
dE9mTmV4dCgpKSwgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBqaXQuc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJmpp
dCk7CiAgICAgICAgIGRvbmUubGluaygmaml0KTsKICAgICB9OwpAQCAtMjE4NywxMSArMjA3OCwx
MSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVP
cFJlc29sdmVTY29wZVRodW5rKFZNJiB2bSkKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToK
ICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAg
ICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBj
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgotICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBqaXQu
bG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkp
LCByZWdUMCk7Ci0gICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwotICAgICAgICAgICAgaml0LmxvYWQzMihB
ZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGlu
Z0Vwb2NoKCkpLCByZWdUMSk7Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5j
aDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9i
YWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgQ29kZUJsb2NrOjpvZmZz
ZXRPZkdsb2JhbE9iamVjdCgpKSwgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgZG9WYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJldHVy
blZhbHVlR1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
TWV0YWRhdGE6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBB
ZGRyZXNzKHJldHVyblZhbHVlR1BSLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhp
Y2FsQmluZGluZ0Vwb2NoKCkpLCBzY3JhdGNoR1BSKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogCkBAIC0yMjAxLDExICsyMDkyLDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mIHZtKQog
ICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAg
ICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMg
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSBmb3IgR2xvYmFsVmFyKiwKICAgICAgICAgICAgIC8v
IGFuZCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQo
KSBmb3IgR2xvYmFsTGV4aWNhbFZhciouCi0gICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNz
Rm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSks
IHJlZ1QwKTsKLSAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9m
R2xvYmFsT2JqZWN0KCkpLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBkb1ZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmV0dXJuVmFs
dWVHUFIpOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIg
fHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
Ci0gICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmpl
Y3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZWdUMCk7CisgICAgICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZXR1cm5WYWx1ZUdQUiwgSlNHbG9iYWxPYmpl
Y3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpLCByZXR1cm5WYWx1ZUdQUik7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENsb3N1cmVWYXI6
CkBAIC0yMjg0LDI0ICsyMTc1LDI1IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSklUOjpzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mIHZtCiAgICAgLy8g
VGhlIGZhc3QgcGF0aCBhbHJlYWR5IHB1c2hlZCB0aGUgcmV0dXJuIGFkZHJlc3MuCiAjaWYgQ1BV
KFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7Ci0jZWxpZiBDUFUoQVJN
NjQpCisjZWxpZiBDUFUoQVJNNjQpIHx8IENQVShBUk1fVEhVTUIyKQogICAgIGppdC5wdXNoUGFp
cihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyNlbGlmIENQVShNSVBTKQor
ICAgIGppdC5wdXNoUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgcmV0dXJuQWRkcmVzc1JlZ2lz
dGVyKTsKKyNlbHNlCisjICAgZXJyb3IgIk5vdCBpbXBsZW1lbnRlZCBvbiBwbGF0Zm9ybSIKICNl
bmRpZgogCi0gICAgY29uc3RleHByIEdQUlJlZyBpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSID0g
cmVnVDU7CisgICAgY29uc3RleHByIEdQUlJlZyBpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSID0g
cmVnVDM7CiAgICAgaml0LnN0b3JlMzIoaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiwgdGFnRm9y
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAKLSAgICBjb25z
dGV4cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9IGFyZ3VtZW50R1BSMzsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKICAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9i
amVjdEdQUiA9IGFyZ3VtZW50R1BSMDsKICAgICBjb25zdGV4cHIgR1BSUmVnIGluc3RydWN0aW9u
R1BSID0gYXJndW1lbnRHUFIxOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKGluY29taW5n
Qnl0ZWNvZGVPZmZzZXRHUFIsIHNjcmF0Y2hHUFIgLCBnbG9iYWxPYmplY3RHUFIsIGluc3RydWN0
aW9uR1BSKSk7CiAKLSAgICBzdGF0aWNfYXNzZXJ0KGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIg
IT0gY29kZUJsb2NrR1BSKTsKLSAgICBzdGF0aWNfYXNzZXJ0KGluY29taW5nQnl0ZWNvZGVPZmZz
ZXRHUFIgIT0gZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICBzdGF0aWNfYXNzZXJ0KGluY29taW5nQnl0
ZWNvZGVPZmZzZXRHUFIgIT0gaW5zdHJ1Y3Rpb25HUFIpOwotCi0gICAgaml0LmxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBjb2RlQmxvY2tHUFIpOwotICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFs
T2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwotICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoY29k
ZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwg
aW5zdHJ1Y3Rpb25HUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgc2NyYXRjaEdQUik7CisgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhzY3Jh
dGNoR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RH
UFIpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgQ29kZUJsb2NrOjpvZmZz
ZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSksIGluc3RydWN0aW9uR1BSKTsKICAgICBqaXQu
YWRkUHRyKGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIsIGluc3RydWN0aW9uR1BSKTsKIAogICAg
IGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25SZXNvbHZlU2NvcGVGb3JCYXNl
bGluZSk+KGdsb2JhbE9iamVjdEdQUiwgaW5zdHJ1Y3Rpb25HUFIpOwpAQCAtMjMxMSw4ICsyMjAz
LDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29w
X3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mIHZtCiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGpp
dC5wb3AoWDg2UmVnaXN0ZXJzOjplYnApOwotI2VsaWYgQ1BVKEFSTTY0KQotICAgIGppdC5wb3BQ
YWlyKENDYWxsSGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6bGlu
a1JlZ2lzdGVyKTsKKyNlbGlmIENQVShBUk02NCkgfHwgQ1BVKEFSTV9USFVNQjIpCisgICAgaml0
LnBvcFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisjZWxpZiBDUFUo
TUlQUykKKyAgICBqaXQucG9wUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgcmV0dXJuQWRkcmVz
c1JlZ2lzdGVyKTsKKyNlbHNlCisjICAgZXJyb3IgIk5vdCBpbXBsZW1lbnRlZCBvbiBwbGF0Zm9y
bSIKICNlbmRpZgogICAgIGppdC5yZXQoKTsKIApAQCAtMjMyMiwxNzIgKzIyMTgsNyBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Nj
b3BlR2VuZXJhdG9yKFZNJiB2bQogICAgIHBhdGNoQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2hlY2ss
IENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAg
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFz
ZWxpbmU6IHNsb3dfb3BfcmVzb2x2ZV9zY29wZSIpOwogfQotI2VuZGlmIC8vICFFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIAotdm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKFZp
cnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkKLXsKLSAgICBs
b2FkUHRyKHN0cnVjdHVyZVNsb3QsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdU
MSkpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnIHJl
ZykKLXsKLSAgICBsb2FkUHRyKG9wZXJhbmQsIHJlZyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0R2V0
VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnIHJlZykKLXsK
LSAgICBsb2FkUHRyKG9wZXJhbmQsIHJlZyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZyksIHJl
Zyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIHVpbnRwdHJfdCBvcGVyYW5kKQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpLCBy
ZWdUMCk7Ci19Ci0KLSNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi12b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJv
bVNjb3BlPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVU
eXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29k
ZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLQotICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc2NvcGVHUFIgPSByZWdUMjsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBz
Y29wZUdQUik7Ci0KLSAgICBKdW1wTGlzdCBzbG93Q2FzZTsKLQotICAgIGF1dG8gZG9WYXJJbmpl
Y3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewotICAgICAg
ICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hw
b2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBB
ZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1t
MzIoSXNJbnZhbGlkYXRlZCkpKTsKLSAgICB9OwotICAgIAotICAgIGF1dG8gZW1pdENvZGUgPSBb
Jl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5
cGUpIHsKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIC8vIFN0cnVjdHVy
ZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1
cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNv
bHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAg
ICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFk
YXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgpLCByZWdUMSk7Ci0gICAgICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAgICAgICAgICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAg
ICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhzY29w
ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKLQotICAgICAgICAg
ICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0g
ICAgICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVC
bG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgcmVnVDMpOwotICAgICAgICAgICAgfSkp
OwotCi0gICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEZyb21T
Y29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMSk7Ci0KLSAgICAgICAgICAg
IGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUg
PSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoZmlyc3RP
dXRPZkxpbmVPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zm
c2V0SXNOb3RPdXRPZkxpbmUpOwotICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhp
cyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQ
UiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgbmVn
MzIocmVnVDEpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsK
LSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAo
Zmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZWdU
MCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdsb2JhbFZh
cjoKLSAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAg
ICBjYXNlIEdsb2JhbExleGljYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBsb2FkUHRy
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9m
T3BlcmFuZCgpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDApLCBy
ZWdUMCk7Ci0gICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8
fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykg
Ly8gVERaIGNoZWNrLgotICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hJZkVt
cHR5KHJlZ1QwKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFy
OgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAg
ICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOwotICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRG
cm9tU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDMpOwotICAgICAgICAg
ICAgc3RhdGljX2Fzc2VydCgxIDw8IDMgPT0gc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgICAgICAg
ICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIHJlZ1QzKTsKLSAgICAgICAgICAgIGFkZFB0cihz
Y29wZUdQUiwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBKU0xl
eGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlZ1QwKTsKLQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIHNsb3dDYXNl
LmFwcGVuZChqdW1wKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVzb2x2
ZWRDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgY2FzZSBVbnJl
c29sdmVkUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xv
c3VyZVZhciB8fCBwcm9maWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKQotICAgICAgICBlbWl0Q29kZShwcm9maWxlZFJlc29sdmVUeXBlKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzJGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJ
bmZvKCksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5
cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBK
dW1wIG5vdEdsb2JhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxWYXIpOwotICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFZhci5saW5rKHRoaXMpOwot
Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbiA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbi5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9w
ZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5
KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25z
LmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAg
ICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0KLSAg
ICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAg
ICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0K
LSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxp
bmsodGhpcyk7Ci0gICAgfQotCi0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2UpOwotCi0gICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotCi0gICAgbG9hZEdsb2JhbE9iamVjdChh
cmd1bWVudEdQUjApOwotICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3Bl
cmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIGFyZ3VtZW50R1BSMCwgaW5zdHJ1Y3Rpb24pOwotfQot
Ci0jZWxzZQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKQEAgLTI1MDIsMTEgKzIyMzMsMTEgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdU
NDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDI7Ci0gICAgY29uc3RleHBy
IEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIGNvbnN0ZXhwciBHUFJSZWcg
Ynl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUMzsKIAogICAgIHVpbnQzMl90IG1ldGFkYXRhT2Zmc2V0
ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUo
Ynl0ZWNvZGUpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKHNjb3BlLCBzY29wZUdQUik7CiAg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtZXRhZGF0YU9mZnNldCksIHNfbWV0YWRhdGFHUFIsIG1l
dGFkYXRhR1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVj
b2RlT2Zmc2V0R1BSKTsKIApAQCAtMjUyOSw3ICsyMjYwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rPEds
b2JhbFZhcj4pOwogCiAgICAgZW1pdE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVKU1IpOwogfQogCiB0ZW1wbGF0ZSA8UmVz
b2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZT4KQEAgLTI1NDIsNiArMjI3MywxMCBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21T
Y29wZVRodW5rKFZNJiB2bSkKICAgICB1c2luZyBNZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpN
ZXRhZGF0YTsKICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BSID0gcmVnVDQ7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
Ynl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUMzsgLy8gVXNlZCBvbmx5IG9uIHNsb3cgcGF0aAorICAg
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q1OworICAgIFVOVVNFRF9QQVJBTShi
eXRlY29kZU9mZnNldEdQUik7CisgICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAocmV0dXJuVmFs
dWVKU1IsIG1ldGFkYXRhR1BSLCBzY29wZUdQUiwgYnl0ZWNvZGVPZmZzZXRHUFIsIHNjcmF0Y2hH
UFIpKTsKIAogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKQEAgLTI1NTIsMTAgKzIyODcsMTAgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRG
cm9tU2NvcGVUaHVuayhWTSYgdm0pCiAgICAgYXV0byBkb1ZhckluamVjdGlvbkNoZWNrID0gWyZd
IChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CiAgICAgICAgIGlmICghbmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGppdC5sb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0
KCkpLCByZWdUMyk7Ci0gICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9P
RkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1Qz
KTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJl
Z1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZh
bGlkYXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhz
Y3JhdGNoR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRyZXNzKHNj
cmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJ
c0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAgCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAo
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKQEAgLTI1NjMsMjkgKzIyOTgsMjggQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2Nv
cGVUaHVuayhWTSYgdm0pCiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNh
c2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAv
LyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2Fj
aGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9u
YWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFyIGluamVjdGlv
bi4KLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9wR2V0RnJv
bVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHJlZ1QxKTsKLSAgICAgICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAg
ICAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5j
aDMyKE5vdEVxdWFsLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMSkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaFRlc3RQdHIoWmVy
bywgc2NyYXRjaEdQUikpOworICAgICAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKHNjcmF0Y2hH
UFIsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhzY29w
ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUikpOwogCiAgICAg
ICAgICAgICBqaXQuaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4g
SnVtcCB7Ci0gICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBqaXQuYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgcmVn
VDMpOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhzY3JhdGNoR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gaml0LmJyYW5jaFB0cihFcXVhbCwg
c2NvcGVHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBq
aXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5k
KCkpLCByZWdUMSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BS
LCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCBzY3JhdGNoR1BSKTsKIAogICAgICAgICAg
ICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGlu
ZSA9IGppdC5icmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIo
Zmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5l
ID0gaml0LmJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZElt
bTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0
aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7CiAgICAgICAgICAgICAgICAgaXNPdXRP
ZkxpbmUubGluaygmaml0KTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDAp
OwotICAgICAgICAgICAgaml0Lm5lZzMyKHJlZ1QxKTsKLSAgICAgICAgICAgIGppdC5zaWduRXh0
ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgICAgICAgICAgaml0LmxvYWQ2NChCYXNlSW5k
ZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY29wZUdQ
Uik7CisgICAgICAgICAgICBqaXQubmVnUHRyKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0
LmxvYWRWYWx1ZShCYXNlSW5kZXgoc2NvcGVHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQsIChm
aXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJldHVy
blZhbHVlSlNSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
R2xvYmFsVmFyOgpAQCAtMjU5MywyMCArMjMyNywxNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiB2bSkK
ICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFu
ZCgpKSwgcmVnVDApOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCksIHJl
Z1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFk
YXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0Lmxv
YWRWYWx1ZShBZGRyZXNzKHNjcmF0Y2hHUFIpLCByZXR1cm5WYWx1ZUpTUik7CiAgICAgICAgICAg
ICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNrLgotICAg
ICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShyZWdUMCkpOwor
ICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoSWZFbXB0eShyZXR1cm5W
YWx1ZUpTUikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoK
ICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAg
ICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpKTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsICBNZXRh
ZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMyk7Ci0gICAgICAgICAgICBzdGF0aWNfYXNz
ZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgIGppdC5sc2hpZnQ2
NChUcnVzdGVkSW1tMzIoMyksIHJlZ1QzKTsKLSAgICAgICAgICAgIGppdC5hZGRQdHIoc2NvcGVH
UFIsIHJlZ1QzKTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIEpTTGV4
aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOwotCisgICAgICAg
ICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCAgTWV0YWRhdGE6Om9mZnNldE9m
T3BlcmFuZCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFZhbHVlKEJhc2VJ
bmRleChzY29wZUdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgSlNMZXhpY2FsRW52aXJvbm1l
bnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZXR1cm5WYWx1ZUpTUik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgogICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5k
KGppdC5qdW1wKCkpOwpAQCAtMjYyMywxMSArMjM1MywxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiB2
bSkKICAgICAgICAgZW1pdENvZGUocHJvZmlsZWRSZXNvbHZlVHlwZSk7CiAgICAgZWxzZSB7CiAg
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1l
dGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCkpLCByZWdUMCk7Ci0gICAg
ICAgIGppdC5hbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7
IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwg
c2NyYXRjaEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBzY3JhdGNoR1BSCiAKICAgICAg
ICAgYXV0byBlbWl0Q2FzZVdpdGhvdXRDaGVjayA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUpIHsKLSAgICAgICAgICAgIEp1bXAgbm90Q2FzZSA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgSnVtcCBub3RD
YXNlID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIocmVz
b2x2ZVR5cGUpKTsKICAgICAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKICAgICAgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CiAgICAgICAgICAgICBub3RDYXNlLmxp
bmsoJmppdCk7CkBAIC0yNjYxLDggKzIzOTEsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiB2bSkKICAg
ICB9CiAKICAgICBzdGF0aWNfYXNzZXJ0KFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzID09
IDEpOwotICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0
YTo6b2Zmc2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQo
KSkpOwotCisgICAgaml0LnN0b3JlVmFsdWUocmV0dXJuVmFsdWVKU1IsIEFkZHJlc3MobWV0YWRh
dGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0
T2ZGaXJzdEJ1Y2tldCgpKSk7CiAgICAgaml0LnJldCgpOwogCiAgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6VGh1bmsp
OwpAQCAtMjY4MCw0OSArMjQwOSw2NiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYgdgogCiAjaWYg
Q1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6OmVicCk7Ci0jZWxpZiBDUFUo
QVJNNjQpCisjZWxpZiBDUFUoQVJNNjQpIHx8IENQVShBUk1fVEhVTUIyKQogICAgIGppdC5wdXNo
UGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyNlbGlmIENQVShNSVBT
KQorICAgIGppdC5wdXNoUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgcmV0dXJuQWRkcmVzc1Jl
Z2lzdGVyKTsKKyNlbHNlCisjICAgZXJyb3IgIk5vdCBpbXBsZW1lbnRlZCBvbiBwbGF0Zm9ybSIK
ICNlbmRpZgogCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE7
CiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q0OwotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiA9IHJlZ1QzOwogICAgIGppdC5zdG9y
ZTMyKGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBjb2RlQmxv
Y2tHUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0g
cmVnVDI7CiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQ
UjA7CiAgICAgY29uc3RleHByIEdQUlJlZyBpbnN0cnVjdGlvbkdQUiA9IGFyZ3VtZW50R1BSMTsK
LSAgICBzdGF0aWNfYXNzZXJ0KGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIgIT0gY29kZUJsb2Nr
R1BSKTsKLSAgICBzdGF0aWNfYXNzZXJ0KGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIgIT0gZ2xv
YmFsT2JqZWN0R1BSKTsKLSAgICBzdGF0aWNfYXNzZXJ0KGluY29taW5nQnl0ZWNvZGVPZmZzZXRH
UFIgIT0gaW5zdHJ1Y3Rpb25HUFIpOwotICAgIHN0YXRpY19hc3NlcnQobWV0YWRhdGFHUFIgIT0g
Y29kZUJsb2NrR1BSKTsKLSAgICBzdGF0aWNfYXNzZXJ0KG1ldGFkYXRhR1BSICE9IGdsb2JhbE9i
amVjdEdQUik7Ci0gICAgc3RhdGljX2Fzc2VydChtZXRhZGF0YUdQUiAhPSBpbnN0cnVjdGlvbkdQ
Uik7CisgICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAobWV0YWRhdGFHUFIsIGluY29taW5nQnl0
ZWNvZGVPZmZzZXRHUFIsIHNjcmF0Y2hHUFIsIGdsb2JhbE9iamVjdEdQUiwgaW5zdHJ1Y3Rpb25H
UFIpKTsKIAotICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgY29kZUJsb2NrR1BSKTsKLSAgICBqaXQubG9hZFB0cihBZGRyZXNzKGNvZGVCbG9ja0dQ
UiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsK
LSAgICBqaXQubG9hZFB0cihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRP
Zkluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSksIGluc3RydWN0aW9uR1BSKTsKKyAgICBqaXQubG9h
ZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHNjcmF0Y2hHUFIpOwor
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkds
b2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNz
KHNjcmF0Y2hHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkp
LCBpbnN0cnVjdGlvbkdQUik7CiAgICAgaml0LmFkZFB0cihpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0
R1BSLCBpbnN0cnVjdGlvbkdQUik7CiAKLSAgICBBU1NFUlQoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNh
dmVSZWdpc3RlcnMoKS5jb250YWlucyhHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcikpOwotICAg
IGppdC5tb3ZlKG1ldGFkYXRhR1BSLCBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7IC8vIFBy
ZXNlcnZlIG1ldGFkYXRhIGluIGEgY2FsbGVlIHNhdmVkIHJlZ2lzdGVyLgorICAgIC8vIFByZXNl
cnZlIG1ldGFkYXRhIGluIGEgY2FsbGVlIHNhdmVkIHJlZ2lzdGVyLgorI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUNTUiA9IEdQUkluZm86Om51bWJlclRh
Z1JlZ2lzdGVyOworICAgIGF1dG8gcmVzdG9yZUhpamFja2VkQ1NSID0gWyZdKCkgeworICAgICAg
ICBqaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgR1BSSW5mbzo6bnVt
YmVyVGFnUmVnaXN0ZXIpOworICAgIH07CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGNv
bnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFDU1IgPSBzX21ldGFkYXRhR1BSOworICAgIGF1dG8gcmVz
dG9yZUhpamFja2VkQ1NSID0gWyZdKCkgeworICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHNfbWV0YWRhdGFHUFIpOworICAgICAgICBqaXQu
bG9hZFB0cihBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZNZXRhZGF0
YVRhYmxlKCkpLCBzX21ldGFkYXRhR1BSKTsKKyAgICB9OworI2VuZGlmCisgICAgQVNTRVJUKFJl
Z2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkuY29udGFpbnMobWV0YWRhdGFDU1IpKTsK
KyAgICBqaXQubW92ZShtZXRhZGF0YUdQUiwgbWV0YWRhdGFDU1IpOworCiAgICAgaml0LnNldHVw
QXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldEZyb21TY29wZSk+KGdsb2JhbE9iamVjdEdQ
UiwgaW5zdHJ1Y3Rpb25HUFIpOwogICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CiAg
ICAgQ2FsbCBvcGVyYXRpb24gPSBqaXQuY2FsbChPcGVyYXRpb25QdHJUYWcpOwogICAgIEp1bXAg
ZXhjZXB0aW9uQ2hlY2sgPSBqaXQuZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlvbkNoZWNrKHZtKTsK
IAotICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKEdQUkluZm86Om51bWJlclRhZ1JlZ2lz
dGVyLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9m
Rmlyc3RCdWNrZXQoKSkpOwotICAgIGppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1i
ZXJUYWcpLCBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7CisgICAgaml0LnN0b3JlVmFsdWUo
cmV0dXJuVmFsdWVKU1IsIEFkZHJlc3MobWV0YWRhdGFDU1IsIE1ldGFkYXRhOjpvZmZzZXRPZlBy
b2ZpbGUoKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CisgICAgcmVz
dG9yZUhpamFja2VkQ1NSKCk7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wb3AoWDg2UmVn
aXN0ZXJzOjplYnApOwotI2VsaWYgQ1BVKEFSTTY0KQorI2VsaWYgQ1BVKEFSTTY0KSB8fCBDUFUo
QVJNX1RIVU1CMikKICAgICBqaXQucG9wUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1Jl
Z2lzdGVyKTsKKyNlbGlmIENQVShNSVBTKQorICAgIGppdC5wb3BQYWlyKGZyYW1lUG9pbnRlclJl
Z2lzdGVyLCByZXR1cm5BZGRyZXNzUmVnaXN0ZXIpOworI2Vsc2UKKyMgICBlcnJvciAiTm90IGlt
cGxlbWVudGVkIG9uIHBsYXRmb3JtIgogI2VuZGlmCiAgICAgaml0LnJldCgpOwogCiAgICAgZXhj
ZXB0aW9uQ2hlY2subGluaygmaml0KTsKLSAgICBqaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6TnVtYmVyVGFnKSwgR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpOworICAgIHJlc3RvcmVI
aWphY2tlZENTUigpOwogICAgIEp1bXAganVtcFRvSGFuZGxlciA9IGppdC5qdW1wKCk7CiAKICAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKQEAgLTI3MzEsNyArMjQ3Nyw2IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9mcm9tX3Njb3Bl
R2VuZXJhdG9yKFZNJiB2CiAgICAgcGF0Y2hCdWZmZXIubGluayhqdW1wVG9IYW5kbGVyLCBDb2Rl
TG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5l
OiBzbG93X29wX2dldF9mcm9tX3Njb3BlIik7CiB9Ci0jZW5kaWYgLy8gIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKQEAgLTI3NDcsMjMgKzI0OTIsMjggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CiAgICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rp
b24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBH
bG9iYWxPYmplY3QuCiAgICAgICAgICAgICAvLyBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUg
aGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBsb2Fk
UHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRP
ZlN0cnVjdHVyZSgpLCByZWdUMSk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjb3BlLCByZWdUMCk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFpl
cm8sIHJlZ1QxKSk7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJl
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QxKSk7CisgICAgICAgICAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgdmFsdWVK
U1IgPSBqc1JlZ1QxMDsKKyAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSBy
ZWdUMjsKKyAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUjEgPSByZWdUMzsK
KyAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUjIgPSByZWdUNDsKKyAgICAg
ICAgICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKHZhbHVlSlNSLCBzY29wZUdQUiwgc2NyYXRj
aEdQUjEsIHNjcmF0Y2hHUFIyKSk7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5
dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgpLCBzY3Jh
dGNoR1BSMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChzY29w
ZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJv
LCBzY3JhdGNoR1BSMSkpOworICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaEdQUjEs
IFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSMSkpOwogCi0gICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUpTUik7CiAKICAgICAgICAgICAgIGppdEFzc2Vy
dChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAg
ICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwotICAgICAgICAgICAgICAgIHJldHVybiBicmFu
Y2hQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMyk7CisgICAgICAgICAgICAgICAgbG9hZEdsb2JhbE9i
amVjdChzY3JhdGNoR1BSMik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVh
bCwgc2NvcGVHUFIsIHNjcmF0Y2hHUFIyKTsKICAgICAgICAgICAgIH0pKTsKIAotICAgICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRv
U2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDEpOwotICAgICAgICAgICAg
bmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVn
VDMsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZUdQ
UiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjIpOworICAgICAgICAg
ICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZPcGVyYW5kKCksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIG5lZ1B0cihzY3Jh
dGNoR1BSMSk7CisgICAgICAgICAgICBzdG9yZVZhbHVlKHZhbHVlSlNSLCBCYXNlSW5kZXgoc2Ny
YXRjaEdQUjIsIHNjcmF0Y2hHUFIxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQg
LSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAgICAgICAgICAgIGVtaXRXcml0ZUJh
cnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQpAQCAtMjc3MSwyMiArMjUyMSwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAg
ICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICBjYXNlIEds
b2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRW
YXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlLCByZWdUMCk7CisgICAgICAgICAgICBzdGF0aWNf
YXNzZXJ0KG5vT3ZlcmxhcChqc1JlZ1QxMCwgcmVnVDIsIHJlZ1QzKSk7CisgICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
LCByZWdUMik7CisgICAgICAgICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSwg
cmVnVDIpOwogCi0gICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1
dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDApOworICAgICAgICAg
ICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QyKTsKIAogICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxp
emF0aW9uKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJl
c29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2Ug
bmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3Zl
IHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCi0gICAgICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDEpOwotICAgICAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKKyAgICAgICAgICAgICAgICBsb2FkVmFsdWUoQWRk
cmVzcyhyZWdUMiksIGpzUmVnVDEwKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkVtcHR5KGpzUmVnVDEwKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGxvYWRQ
dHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9m
V2F0Y2hwb2ludFNldCgpLCByZWdUMSk7Ci0gICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRj
aHBvaW50KHJlZ1QxKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMyk7
CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QzKTsKIAotICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgICAgICAgICAg
c3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCkpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwganNSZWdUMTApOworICAgICAgICAgICAgc3RvcmVWYWx1ZShqc1Jl
Z1QxMCwgQWRkcmVzcyhyZWdUMikpOwogCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNj
b3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0y
Nzk0LDE0ICsyNTQ1LDE1IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBjYXNlIFJlc29sdmVkQ2xv
c3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAg
ICAgICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAoanNSZWdUMTAsIHJlZ1QyLCByZWdUMykpOwor
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSwgcmVnVDMpOwogCi0gICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQo
KSwgcmVnVDApOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQ
dXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QzKTsKICAg
ICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0
YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMik7Ci0gICAgICAgICAgICBlbWl0Tm90aWZ5
V3JpdGVXYXRjaHBvaW50KHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHJlZ1QwKTsKLSAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEJhc2VJbmRleChyZWdUMCwg
cmVnVDIsIFRpbWVzRWlnaHQsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxl
cygpKSk7CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QzKTsKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGpzUmVnVDEwKTsKKyAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKHNjb3BlLCByZWdUMyk7CisgICAg
ICAgICAgICBzdG9yZVZhbHVlKGpzUmVnVDEwLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1l
c0VpZ2h0LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSkpOwogCiAg
ICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFs
dWUpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yOTQ4LDEwICsyNzAwLDEwIEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2Fy
Z3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgbG9hZDY0KEFkZHJl
c3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGFyZ3VtZW50cywgcmVnVDApOwor
ICAgIGxvYWRWYWx1ZShBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZz
ZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCBqc1JlZ1QxMCk7
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwganNSZWdUMTApOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTI5NjAsNTEgKzI3MTIsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3Vt
ZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxS
ZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXgg
PSBieXRlY29kZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgc3Rv
cmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0
KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CisKKyAgICBzdGF0
aWNfYXNzZXJ0KG5vT3ZlcmxhcChyZWdUMiwganNSZWdUMTApKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyUGF5bG9hZChhcmd1bWVudHMsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCBqc1JlZ1QxMCk7CisgICAgc3RvcmVWYWx1ZShqc1JlZ1QxMCwgQWRkcmVz
cyhyZWdUMiwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CiAKICAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3Vt
ZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRXcml0
ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdy
aXRlQmFycmllck1vZGUgbW9kZSkKLXsKLSAgICAvLyB2YWx1ZSBtYXkgYmUgaW52YWxpZCBWaXJ0
dWFsUmVnaXN0ZXIgaWYgbW9kZSBpcyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIG9yIFNob3Vs
ZEZpbHRlckJhc2UuCi0gICAgSnVtcCB2YWx1ZU5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hv
dWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKLSAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgICAgICB2YWx1
ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIH0KLSAgICAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCk7Ci0gICAgSnVtcCBvd25lck5vdENlbGw7
Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hv
dWxkRmlsdGVyQmFzZSkKLSAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKLQotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFu
Y2godm0oKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVj
ayhvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIHJlZ1QwKTsKLSAgICBvd25l
cklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7Ci0KLSAgICBpZiAobW9kZSA9PSBTaG91
bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQotICAgICAg
ICBvd25lck5vdENlbGwubGluayh0aGlzKTsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJW
YWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgCi0gICAgICAgIHZhbHVl
Tm90Q2VsbC5saW5rKHRoaXMpOwotfQotCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0Nl
bGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkK
LXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCB2
YWx1ZU5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpCi0gICAgICAg
IHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAgICBlbWl0V3JpdGVC
YXJyaWVyKG93bmVyKTsKLQotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSAKLSAg
ICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2dl
dF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJu
YWxGaWVsZD4oKTsKQEAgLTMwMTIsMTEgKzI3MjgsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CiAgICAgdW5zaWduZWQg
aW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0ludGVybmFsRmllbGRP
YmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCByZWdUMCk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYmFzZSwgcmVnVDApOworICAgIGxvYWRWYWx1
ZShBZGRyZXNzKHJlZ1QwLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50
ZXJuYWxGaWVsZChpbmRleCkpLCBqc1JlZ1QxMCk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIGpzUmVnVDEwKTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTMwMjYsMTIgKzI3NDIsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFs
X2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCBpbmRleCA9
IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgc3Rv
cmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6
b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVy
bGFwKHJlZ1QyLCBqc1JlZ1QxMCkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2Fk
KGJhc2UsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBqc1JlZ1Qx
MCk7CisgICAgc3RvcmVWYWx1ZShqc1JlZ1QxMCwgQWRkcmVzcyhyZWdUMiwgSlNJbnRlcm5hbEZp
ZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSk7CiAgICAgZW1p
dFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCisjaWYg
VVNFKEpTVkFMVUU2NCkKKwogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0
b3IoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4o
KTsKQEAgLTMyNjgsMTggKzI5ODcsOTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9o
YXNfb3duX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3QKICAgICBl
bWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk+KCksIHNsb3dfcGF0
aF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpOwogfQogCi0jZWxzZSAvLyBVU0UoSlNWQUxV
RTY0KQorI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3By
b3BlcnR5X2VudW1lcmF0b3IoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd19wYXRoX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKKyAgICBzbG93UGF0aENh
bGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwg
c2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudW1lcmF0
b3JfbmV4dCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRf
b3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOworICAgIHNsb3dQ
YXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dl
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJikKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKK30KKwordm9pZCBKSVQ6
OmVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudW1lcmF0b3JfaW5fYnlfdmFsKTsKKyAgICBz
bG93UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2hh
c19vd25fcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sK
KyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd19wYXRoX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk7CisgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsKK30KKworI2VuZGlmCisKKyNpZiBVU0UoSlNWQUxVRTY0KQogCiB2b2lkIEpJ
VDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewogICAgIC8vIHZhbHVlIG1heSBiZSBp
bnZhbGlkIFZpcnR1YWxSZWdpc3RlciBpZiBtb2RlIGlzIFVuY29uZGl0aW9uYWxXcml0ZUJhcnJp
ZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4KICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAgICBpZiAo
bW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRW
YWx1ZSkgewotICAgICAgICBlbWl0TG9hZFRhZyh2YWx1ZSwgcmVnVDApOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgICAgIHZhbHVlTm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAgfQotICAgIAotICAgIGVtaXRMb2FkKG93bmVy
LCByZWdUMCwgcmVnVDEpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVn
VDApOworICAgIEp1bXAgb3duZXJOb3RDZWxsOworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRl
ckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCisgICAgICAgIG93bmVy
Tm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICBKdW1wIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIHJlZ1QwLCByZWdUMSk7CisgICAg
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1Bh
dGgsICZ2bSgpLCByZWdUMCk7CisgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRo
aXMpOworCisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUg
PT0gU2hvdWxkRmlsdGVyQmFzZSkKKyAgICAgICAgb3duZXJOb3RDZWxsLmxpbmsodGhpcyk7Cisg
ICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJC
YXNlQW5kVmFsdWUpCisgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOworfQorCit2b2lk
IEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKK3sKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CisgICAgSnVtcCB2YWx1ZU5vdENlbGw7CisgICAgaWYgKG1vZGUgPT0g
U2hvdWxkRmlsdGVyVmFsdWUpCisgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMCk7CisKKyAgICBlbWl0V3JpdGVCYXJyaWVyKG93bmVyKTsKKworICAgIGlmIChtb2Rl
ID09IFNob3VsZEZpbHRlclZhbHVlKQorICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsK
K30KKworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKwordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJp
ZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFy
cmllck1vZGUgbW9kZSkKK3sKKyAgICAvLyB2YWx1ZSBtYXkgYmUgaW52YWxpZCBWaXJ0dWFsUmVn
aXN0ZXIgaWYgbW9kZSBpcyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIG9yIFNob3VsZEZpbHRl
ckJhc2UuCisgICAgSnVtcCB2YWx1ZU5vdENlbGw7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmls
dGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyh2YWx1ZSwgcmVnVDApOworICAgICAgICB2YWx1ZU5v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIH0KKworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwLCByZWdUMSk7CiAgICAgSnVtcCBvd25lck5vdENlbGw7
CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSB8fCBtb2RlID09IFNob3VsZEZpbHRl
ckJhc2VBbmRWYWx1ZSkKICAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKQEAgLTMyOTAsNyArMzA4Nyw3IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZp
cnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhCiAKICAg
ICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFz
ZUFuZFZhbHVlKQogICAgICAgICBvd25lck5vdENlbGwubGluayh0aGlzKTsKLSAgICBpZiAobW9k
ZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1
ZSkgCisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRG
aWx0ZXJCYXNlQW5kVmFsdWUpCiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQog
CkBAIC0zMjk4LDE3ICszMDk1LDE3IEBAIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2Vs
bCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kCiB7CiAgICAg
SnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIHsK
LSAgICAgICAgZW1pdExvYWRUYWcodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlclRhZyh2YWx1ZSwgcmVnVDApOwogICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOwogICAgIH0KIAogICAgIGVtaXRXcml0ZUJhcnJpZXIob3duZXIp
OwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIAorICAgIGlmIChtb2RlID09
IFNob3VsZEZpbHRlclZhbHVlKQogICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKIH0K
IAotI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCisjZW5kaWYKIAogdm9pZCBKSVQ6OmVtaXRXcml0
ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzYwYjYzMmU5NGQxZGVmMmY0
MjMwZjBhODRiZTgzNmNmZDczNTJhMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0KLSNpZiBFTkFCTEUoSklUKQotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0jaW5jbHVkZSAiSklU
LmgiCi0KLSNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVySW5saW5lcy5oIgotI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgotI2luY2x1ZGUgIkdD
QXdhcmVKSVRTdHViUm91dGluZS5oIgotI2luY2x1ZGUgIkludGVycHJldGVySW5saW5lcy5oIgot
I2luY2x1ZGUgIkpJVElubGluZXMuaCIKLSNpbmNsdWRlICJKU0FycmF5LmgiCi0jaW5jbHVkZSAi
SlNGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCi0jaW5jbHVk
ZSAiSlNQcm9taXNlLmgiCi0jaW5jbHVkZSAiTGlua0J1ZmZlci5oIgotI2luY2x1ZGUgIk9wY29k
ZUlubGluZXMuaCIKLSNpbmNsdWRlICJSZXN1bHRUeXBlLmgiCi0jaW5jbHVkZSAiU2xvd1BhdGhD
YWxsLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKLSNpbmNsdWRlIDx3dGYvU3Ry
aW5nUHJpbnRTdHJlYW0uaD4KLQotCi1uYW1lc3BhY2UgSlNDIHsKLSAgICAKLXZvaWQgSklUOjpl
bWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dEdldHRlckJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBpbnQgb3B0
aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZ2V0dGVy
ID0gYnl0ZWNvZGUubV9hY2Nlc3NvcjsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdU
MSk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIHJlZ1QxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5p
bXBsKCksIG9wdGlvbnMsIHJlZ1QzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRl
cl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlJZD4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBpbnQgcHJv
cGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGludCBvcHRpb25zID0gYnl0ZWNvZGUu
bV9hdHRyaWJ1dGVzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzZXR0ZXIgPSBieXRlY29kZS5tX2Fj
Y2Vzc29yOwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0TG9h
ZFBheWxvYWQoc2V0dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRT
ZXR0ZXJCeUlkLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1f
cHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywg
cmVnVDMpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyU2V0dGVyQnlJZD4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBpbnQgcHJvcGVy
dHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGludCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUu
bV9hdHRyaWJ1dGVzOwotICAgIFZpcnR1YWxSZWdpc3RlciBnZXR0ZXIgPSBieXRlY29kZS5tX2dl
dHRlcjsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2V0dGVyID0gYnl0ZWNvZGUubV9zZXR0ZXI7Ci0K
LSAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRMb2FkUGF5bG9hZChn
ZXR0ZXIsIHJlZ1QzKTsKLSAgICBlbWl0TG9hZFBheWxvYWQoc2V0dGVyLCByZWdUNCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIG1fcHJvZmlsZWRDb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgbV9wcm9maWxlZENvZGVCbG9jay0+aWRlbnRpZmll
cihwcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGVzLCByZWdUMywgcmVnVDQpOwotfQotCi12b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGdldHRlciA9IGJ5dGVjb2RlLm1fYWNjZXNzb3I7Ci0KLSAg
ICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDIpOwotICAgIGVtaXRMb2FkKHByb3BlcnR5LCBy
ZWdUMSwgcmVnVDApOwotICAgIGVtaXRMb2FkUGF5bG9hZChnZXR0ZXIsIHJlZ1QzKTsKLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBtX3Byb2ZpbGVkQ29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIGF0dHJp
YnV0ZXMsIHJlZ1QzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5VmFsPigpOwotICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVz
ID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIFZpcnR1YWxSZWdpc3RlciBzZXR0ZXIgPSBi
eXRlY29kZS5tX2FjY2Vzc29yOwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QyKTsK
LSAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZFBheWxv
YWQoc2V0dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJC
eVZhbCwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QyLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCBhdHRyaWJ1dGVzLCByZWdUMyk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNj
b3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKLXsKLSAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHJlZ1QwKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDEpOwotICAgIGVt
aXRMb2FkUGF5bG9hZChzY29wZSwgcmVnVDApOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBkZXB0aDsgKytpKQotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9m
ZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29k
ZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNv
bHZlVHlwZTsKLSAgICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRo
OwotCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsK
LSAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5OgotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
ewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50
U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fcHJvZmlsZWRDb2RlQmxvY2spOwotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0
VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBy
ZWdUMCk7Ci0gICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2xvYmFsTGV4aWNhbEJpbmRp
bmdFcG9jaCwgcmVnVDEpOwotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1
YWwsIEFic29sdXRlQWRkcmVzcyhtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+
YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZWdUMSk7Ci0gICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAg
ICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIGNhc2UgR2xvYmFsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6IAotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6
Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
LSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNj
b3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFZh
ckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVn
VDApOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJl
Z1QxKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVn
VDApOwotICAgICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAg
Y2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRS
ZXNvbHZlQ2xvc3VyZShkc3QsIHNjb3BlLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSksIGRlcHRoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1vZHVsZVZh
cjoKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZWdU
MSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52
aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdU
MSwgcmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRHluYW1pYzoKLSAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5OgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9
Ci0gICAgfTsKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewot
ICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9y
ZXNvbHZlVHlwZSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAg
ICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKLQotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBl
bWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIpOwotCi0gICAg
ICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAg
bG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0
eS5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGlu
ayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAg
IGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1
bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAg
ICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUo
cmVzb2x2ZVR5cGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgSklUOjplbWl0
TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoq
IHN0cnVjdHVyZVNsb3QpCi17Ci0gICAgZW1pdExvYWQoc2NvcGUsIHJlZ1QxLCByZWdUMCk7Ci0g
ICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
UHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZWdUMikpOwotfQotCi12b2lkIEpJVDo6ZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUq
IG9wZXJhbmQsIEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkKQotewotICAgIHVpbnRwdHJfdCBy
YXdBZGRyZXNzID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ob3BlcmFuZCk7Ci0gICAgbG9hZDMy
KGJpdHdpc2VfY2FzdDx2b2lkKj4ocmF3QWRkcmVzcyArIFRhZ09mZnNldCksIHRhZyk7Ci0gICAg
bG9hZDMyKGJpdHdpc2VfY2FzdDx2b2lkKj4ocmF3QWRkcmVzcyArIFBheWxvYWRPZmZzZXQpLCBw
YXlsb2FkKTsKLX0KLXZvaWQgSklUOjplbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1Zh
bHVlKiogb3BlcmFuZCwgR1BSUmVnIHRhZywgR1BSUmVnIHBheWxvYWQpCi17Ci0gICAgbG9hZFB0
cihvcGVyYW5kLCBwYXlsb2FkKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhwYXlsb2FkLCBUYWdPZmZz
ZXQpLCB0YWcpOwotICAgIGxvYWQzMihBZGRyZXNzKHBheWxvYWQsIFBheWxvYWRPZmZzZXQpLCBw
YXlsb2FkKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3Rl
ciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpCi17Ci0gICAgZW1pdExvYWQoc2NvcGUsIHJlZ1Qx
LCByZWdUMCk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50
OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikgKyBUYWdP
ZmZzZXQpLCByZWdUMSk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmly
b25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3Rlcikg
KyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJv
bV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
ayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1
YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1
Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAg
IHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZt
ZXRhZGF0YS5tX29wZXJhbmQpOwotICAgIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKLSAgICAg
ICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5Ogot
ICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAg
ICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3Qp
OyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBH
UFJSZWcgYmFzZSA9IHJlZ1QyOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFRhZyA9IHJlZ1Qx
OwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWQgPSByZWdUMDsKLSAgICAgICAgICAg
IEdQUlJlZyBvZmZzZXQgPSByZWdUMzsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbW92ZShy
ZWdUMCwgYmFzZSk7Ci0gICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7Ci0g
ICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlz
T3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJ
bW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJl
YXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxp
bmUubGluayh0aGlzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBiYXNlKTsKLSAgICAgICAgICAg
IG5lZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBsb2FkMzIoQmFzZUluZGV4KGJhc2UsIG9mZnNl
dCwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQp
ICsgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwg
cmVzdWx0UGF5bG9hZCk7Ci0gICAgICAgICAgICBsb2FkMzIoQmFzZUluZGV4KGJhc2UsIG9mZnNl
dCwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykgKyAo
Zmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1
bHRUYWcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHbG9i
YWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAg
ICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwotICAgICAg
ICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdl
dFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNs
b3QpLCByZWdUMSwgcmVnVDApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVt
aXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCks
IHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4
aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykgLy8gVERaIGNoZWNrLgotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmRW1wdHkocmVnVDEpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENsb3N1
cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0g
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihzY29w
ZSwgKm9wZXJhbmRTbG90KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIER5bmFt
aWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZh
cjoKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgc3dpdGNoIChy
ZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRv
RW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAg
ICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8v
IExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9w
ZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBl
KSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc05vdEdsb2JhbFByb3BlcnR5Lmxpbmso
dGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4
aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJl
c29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0
IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1Qw
KTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVn
VDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRo
aXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIu
bGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotCi0g
ICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1Qw
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIFZp
cnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBtX3Byb2ZpbGVk
Q29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0TG9hZCh2YWx1ZSwg
cmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICB1aW50cHRyX3Qg
cmF3QWRkcmVzcyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG9wZXJhbmQpOwotICAgIHN0b3Jl
MzIocmVnVDEsIGJpdHdpc2VfY2FzdDx2b2lkKj4ocmF3QWRkcmVzcyArIFRhZ09mZnNldCkpOwot
ICAgIHN0b3JlMzIocmVnVDAsIGJpdHdpc2VfY2FzdDx2b2lkKj4ocmF3QWRkcmVzcyArIFBheWxv
YWRPZmZzZXQpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0
KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCi17Ci0gICAgZW1pdExvYWQodmFsdWUs
IHJlZ1QxLCByZWdUMCk7Ci0gICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1Qy
KTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoKmluZGlyZWN0V2F0Y2hwb2ludFNldCk7IC8vIEZJWE1F
OiA/PwotICAgIGxvYWRQdHIoYWRkcmVzc09mT3BlcmFuZCwgcmVnVDIpOwotICAgIHN0b3JlMzIo
cmVnVDEsIEFkZHJlc3MocmVnVDIsIFRhZ09mZnNldCkpOwotICAgIHN0b3JlMzIocmVnVDAsIEFk
ZHJlc3MocmVnVDIsIFBheWxvYWRPZmZzZXQpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9z
dXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRMb2FkKHZhbHVl
LCByZWdUMywgcmVnVDIpOwotICAgIGVtaXRMb2FkKHNjb3BlLCByZWdUMSwgcmVnVDApOwotICAg
IGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlMzIocmVnVDMsIEFkZHJlc3MocmVnVDAs
IEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNp
emVvZihSZWdpc3RlcikgKyBUYWdPZmZzZXQpKTsKLSAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNz
KHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJh
bmQgKiBzaXplb2YoUmVnaXN0ZXIpICsgUGF5bG9hZE9mZnNldCkpOwotfQotCi12b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRv
U2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2Zp
bGVkQ29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Nj
b3BlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAg
R2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVC
bG9jaykubV9nZXRQdXRJbmZvOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0
SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRh
ZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7Ci0gICAgCi0g
ICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5k
aXJlY3RMb2FkRm9yT3BlcmFuZCkgewotICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0g
ICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1f
cHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFs
dWUpOwotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVj
dHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24uCi0gICAg
ICAgICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7Ci0g
ICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmUzMihyZWdUMywgQmFz
ZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0g
MikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAgICAgICAgICBzdG9yZTMyKHJlZ1QyLCBC
YXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQg
LSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIEdsb2JhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6Ci0g
ICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAg
ICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3Bl
Rm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFdyaXRl
QmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgICAg
ICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2
ZVR5cGUsIHJlZ1QwKTsKLSAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJ
bmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhl
cmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBjaGVj
a3Mgc3RhdGljYWxseS4KLSAgICAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFu
ZCkKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0
d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMSwgcmVnVDApOwotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVy
KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDEsIHJlZ1QwKTsKLSAg
ICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QxKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAg
ICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0
d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwgbWV0YWRhdGEubV93YXRj
aHBvaW50U2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
UmVzb2x2ZWRDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNh
c2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0V3Jp
dGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5k
U2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkg
ewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAg
ICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihU
cnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2
ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIEp1bXAg
aXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGFkZFNs
b3dDYXNlKGp1bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNhbiBoYXBwZW4gaWYgd2UgYXR0ZW1wdCB0
byBwdXQgYSB2YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxpemVkIGNvbnN0IGJpbmRpbmcuCi0KLSAg
ICAgICAgaXNHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc0dsb2JhbFByb3BlcnR5Lmxpbmso
dGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIHNr
aXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJl
c29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMy
KCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZElt
bTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGlu
dG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAg
ICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9i
YWxQcm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0g
ICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQot
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAg
ICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29k
ZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZv
LnJlc29sdmVUeXBlKCk7Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewotICAg
ICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9tb2RlX3JlYWRvbmx5X3Byb3BlcnR5X3dyaXRlX2Vy
cm9yKTsKLSAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRG
cm9tQXJndW1lbnRzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7
Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLQotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIAotICAgIGVtaXRMb2Fk
UGF5bG9hZChhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgRGly
ZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pICsgVGFnT2Zmc2V0KSwgcmVzdWx0UmVncy50YWdHUFIoKSk7Ci0gICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5k
ZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIFBheWxvYWRPZmZzZXQpLCByZXN1
bHRSZWdzLnBheWxvYWRHUFIoKSk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVzdWx0UmVncy50YWdHUFIoKSwg
cmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9f
YXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb0FyZ3VtZW50cz4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7
Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIAotICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJn
dW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgIAotICAgIGVtaXRMb2FkUGF5
bG9hZChhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1Qy
KTsKLSAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0
b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBU
YWdPZmZzZXQpKTsKLSAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1
bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPikgKyBQYXlsb2FkT2Zmc2V0KSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9pbnRl
cm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVs
ZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgdW5zaWduZWQgaW5kZXgg
PSBieXRlY29kZS5tX2luZGV4OwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDIp
OwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QyLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46
Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkgKyBUYWdPZmZzZXQpLCByZXN1bHRSZWdzLnRh
Z0dQUigpKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0
SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpICsgUGF5bG9hZE9mZnNldCksIHJl
c3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRhZ0dQUigp
LCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3B1dF9p
bnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0SW50ZXJuYWxG
aWVsZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIHVuc2lnbmVk
IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCBy
ZWdUMCk7Ci0gICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMik7Ci0gICAgc3RvcmUzMihy
ZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRP
ZkludGVybmFsRmllbGQoaW5kZXgpICsgVGFnT2Zmc2V0KSk7Ci0gICAgc3RvcmUzMihyZWdUMiwg
QWRkcmVzcyhyZWdUMCwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVy
bmFsRmllbGQoaW5kZXgpICsgUGF5bG9hZE9mZnNldCkpOwotICAgIGVtaXRXcml0ZUJhcnJpZXIo
YmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3Byb3BlcnR5X2VudW1lcmF0b3IoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgc2xvd19wYXRoX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKLSAgICBzbG93
UGF0aENhbGwuY2FsbCgpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBKSVRTbG93UGF0
aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2Vu
dW1lcmF0b3JfbmV4dCk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOwotICAg
IHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9lbnVtZXJh
dG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJikKLXsKLSAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRo
aXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudW1lcmF0b3JfaW5fYnlfdmFsKTsK
LSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJh
dG9yX2hhc19vd25fcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKLXsKLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgc2xvd19wYXRoX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk7Ci0gICAgc2xv
d1BhdGhDYWxsLmNhbGwoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBV
U0UoSlNWQUxVRTMyXzY0KQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKaW5kZXggN2NhMWI0ZTdjM2ZkMDg0ZGQyN2FjMzg1
MDZhYTljNmFlZDk1ZGViMC4uZjE4NmZiODJiMWZmOTc4ZDhmNjdhNGYwNTMzOGU5Y2ZiNGM4MjM3
NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaApAQCAtMzYs
NyArMzYsNyBAQAogI2lmIEVOQUJMRShKSVQpCiAKIG5hbWVzcGFjZSBKU0MgewotICAgIGNsYXNz
IEpTSW50ZXJmYWNlSklUIDogcHVibGljIENDYWxsSGVscGVycywgcHVibGljIEdQUkluZm8sIHB1
YmxpYyBGUFJJbmZvIHsKKyAgICBjbGFzcyBKU0ludGVyZmFjZUpJVCA6IHB1YmxpYyBDQ2FsbEhl
bHBlcnMsIHB1YmxpYyBHUFJJbmZvLCBwdWJsaWMgSlNSSW5mbywgcHVibGljIEZQUkluZm8gewog
ICAgIHB1YmxpYzoKIAogICAgICAgICBKU0ludGVyZmFjZUpJVChWTSogdm0gPSBudWxscHRyLCBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IG51bGxwdHIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1RodW5rR2VuZXJhdG9ycy5jcHAKaW5kZXggMjk3MTQ3ZTFjNGMwOGRjY2Q1ZjdiNzg2NDEx
ZDg1NWIyYTFkZTQ3Yy4uYjg0MGVjNTg1OWQ2MjAwNzFiNmQ4OGM0M2JiOGU5OGI0NzI5ZTJjYSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcApAQCAt
NDEsOCArNDEsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotI2lmIEVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4
Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKQEAgLTYx
LDYgKzU5LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVF
eGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNo
QnVmZmVyLCBKSVRUaHVua1B0clRhZywgImhhbmRsZUV4Y2VwdGlvbiIpOwogfQogCisjaWYgRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCisKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrR2VuZXJhdG9yKFZNJiB2
bSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpAQCAtNzcsMTQgKzc3LDIwIEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFt
ZVJvbGxiYWNrR2VuZXJhCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJ
VFRodW5rUHRyVGFnLCAiaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrIik7CiB9
CiAKKyNlbmRpZgorCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBvcFRo
dW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQogewog
ICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5hZGRQdHIo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMiAqIHNpemVvZihDUFVSZWdpc3RlcikpLCBYODZS
ZWdpc3RlcnM6OmVzcCk7Ci0jZWxpZiBDUFUoQVJNNjQpCisjZWxpZiBDUFUoQVJNNjQpIHx8IENQ
VShBUk1fVEhVTUIyKQogICAgIGppdC5wb3BQYWlyKENDYWxsSGVscGVyczo6ZnJhbWVQb2ludGVy
UmVnaXN0ZXIsIENDYWxsSGVscGVyczo6bGlua1JlZ2lzdGVyKTsKKyNlbGlmIENQVShNSVBTKQor
ICAgIGppdC5wb3BQYWlyKENDYWxsSGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENDYWxs
SGVscGVyczo6cmV0dXJuQWRkcmVzc1JlZ2lzdGVyKTsKKyNlbHNlCisjICAgZXJyb3IgIk5vdCBp
bXBsZW1lbnRlZCBvbiBwbGF0Zm9ybSIKICNlbmRpZgogCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGNvbnRpbnVhdGlvbiA9IGppdC5qdW1wKCk7CkBAIC05NSw2ICsxMDEsOCBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5k
bGVFeGNlcHRpb25HZQogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRU
aHVua1B0clRhZywgInBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb24iKTsK
IH0KIAorI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorCiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAg
ICBDQ2FsbEhlbHBlcnMgaml0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmgKaW5kZXggMGY5ZjZlMmQzNmY2ZGQyM2UxODcyNmFjZTYzMTRhMzBhMjAxZGJjZS4u
MjI3OGU4MDRjZTA1NDRhN2JlNWE3OGE3ZTgzZmY1Y2FjZmRkYzdkMyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCkBAIC0zNywxMiArMzcsMTIgQEAgY2xh
c3MgVk07CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uV2l0aENh
bGxGcmFtZVJvbGxiYWNrR2VuZXJhdG9yKFZNJik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5l
cmF0b3IoVk0mKTsKIAogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRv
cihWTSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVua1N0
YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CiAKIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoR2VuZXJhdG9yKFZNJik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443297</attachid>
            <date>2021-11-04 05:58:53 -0700</date>
            <delta_ts>2021-11-09 01:58:18 -0800</delta_ts>
            <desc>v4</desc>
            <filename>bug-232624-20211104125851.patch</filename>
            <type>text/plain</type>
            <size>224107</size>
            <attacher name="Geza Lore">glore</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1MjAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
OGU2MmVhNDg4NmFkOGU2Y2EwNjRjYTRjYWRkMTYwYzAyODk4ZGVhLi43MzMwMmNlM2FhOTEwMzE3
NGQ2NTMyNTM3NThlYThkNzk4NGE1ZmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODggQEAKKzIwMjEtMTEtMDIgIEdlemEgTG9yZSAgPGdsb3JlQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0pTQ10gRW5hYmxlIHNoYXJpbmcgb2YgdW5saW5rZWQgYmFzZWxpbmUgY29kZSBv
biBKU1ZBTFVFMzJfNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzMjYyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggY29udGFpbnMgYSBmZXcgZGlmZmVyZW50IGNoYW5nZXMsIHdoaWNo
IHRha2VuIHRvZ2V0aGVyCisgICAgICAgIGVuYWJsZSB0aGUgc2hhcmluZyBvZiB0aGUgdW5saW5r
ZWQgYmFzZWxpbmUgSklUIGNvZGUgYmV0d2VlbiBkaWZmZXJlbnQKKyAgICAgICAgQ29kZUJsb2Nr
cyBvbiBKU1ZBTFVFMzJfNjQgcGxhdGZvcm1zICh0aGUgc2FtZSB3YXkgYXMgdGhpcyBjb2RlIGlz
CisgICAgICAgIHNoYXJlZCBvbiBKU1ZBTFVFNjQgcGxhdGZvcm1zKS4KKworICAgICAgICAxLiBB
IGxvdCBvZiBiYXNlbGluZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIG9wY29kZXMgdGhhdCBuZWVk
ZWQKKyAgICAgICAgY2hhbmdpbmcgZm9yIHRoZSB1bmxpbmtlZCBiYXNlbGluZSBhcmUgbm93IHVu
aWZpZWQgYmV0d2VlbiB0aGUKKyAgICAgICAgSlNWQUxVRTY0IGFuZCBKU1ZBTFVFMzJfNjQgcGxh
dGZvcm1zLiBOb3RlIHRoYXQgd2hpbGUgdGhpcyByZXF1aXJlZAorICAgICAgICBhZGRpbmcgc29t
ZSBhYnN0cmFjdGlvbiwgdGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBiYXNlbGluZSBKSVQgc2hv
dWxkCisgICAgICAgIGJlIGlkZW50aWNhbCB1c2luZyB0aGlzIGFic3RyYWN0aW9uIGNvbXBhcmVk
IHRvIGJlZm9yZS4KKworICAgICAgICAyLiBJIGFkZGVkIGEgSlNSSW5mbyBjbGFzcyB3aGljaCBk
ZWZpbmVzIHN0YW5kYXJkIG5hbWVzIGZvciBjZXJ0YWluCisgICAgICAgIEpTVmFsdWVSZWcgaW5z
dGFuY2VzLiBUaGlzIGVuYWJsZXMgYSBsb3Qgb2YgdGhlIHVuaWZpY2F0aW9uIGluIHRoZQorICAg
ICAgICBwb2ludCBhYm92ZSB0byBiZSBhIHNpbXBsZSB0cmFuc2Zvcm1hdGlvbi4gQWdhaW4sIHRo
aXMgc2hvdWxkIGhhdmUgbm8KKyAgICAgICAgaW1wYWN0IG9uIHRoZSBnZW5lcmF0ZWQgY29kZSBv
biBKU1ZBTFVFNjQsIGFwYXJ0IGZyb20gc29tZSByZWdpc3RlcgorICAgICAgICBzdWJzdGl0dXRp
b25zLgorCisgICAgICAgIDMuIFRoZSBzaXplcyBvZiB0aGUgcmVzb2x2ZV9zY29wZSBhbmQgZ2V0
X2Zyb21fc2NvcGUgb3BzIGluY3JlYXNlZAorICAgICAgICBzaWduaWZpY2FudGx5IHdpdGggdGhl
IHVubGlua2VkIGJhc2VsaW5lLiBUaGlzIGNhbiBjYXVzZSBpc3N1ZXMgb24KKyAgICAgICAgc29t
ZSBKU1ZBTFVFMzJfNjQgdGFyZ2V0cyB3aGVyZSBtZW1vcnkgaXMgbW9yZSBwcmVjaW91cywgc28g
Zm9yIHRoZXNlCisgICAgICAgIHR3byBvcHMgSSBzd2FwcGVkIGluIHRoZSBpbXBsZW1lbnRhdGlv
bnMgdW5kZXIgRVhUUkFfQ1RJX1RIVU5LUywgd2hpY2gKKyAgICAgICAgaW1wbGVtZW50IHRoZXNl
IHVzaW5nIHNoYXJlZCBzdHVicy4gVGhlc2Ugc3R1YnMgd29yayBvbiBhbGwgcGxhdGZvcm1zCisg
ICAgICAgIHRoYXQgc3VwcG9ydCBFTkFCTEUoSklUKSwgc28gdGhleSBhcmUgbm93IHRoZSBvbmx5
IGltcGxlbWVudGF0aW9uIGFuZAorICAgICAgICBJIGhhdmUgcmVtb3ZlZCB0aGUgYmFzaWMgYmxv
YXRlZCB2ZXJzaW9ucy4gTm90ZSBwdXRfdG9fc2NvcGUgc3VmZmVycworICAgICAgICBmcm9tIHRo
ZSBzYW1lIGNvZGUgc2l6ZSBpbmNyZWFzZSBidXQgY3VycmVudGx5IGRvZXMgbm90IGhhdmUgYSBz
aGFyZWQKKyAgICAgICAgc3R1YiBiYXNlZCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyBPSyBmb3Ig
bm93IHRvIHBhc3MgdGhlIHRlc3Qgc3VpdGVzCisgICAgICAgIG9uIEpTVkFMVUUzMl82NCwgYnV0
IHByb2JhYmx5IHNob3VsZCBiZSBhZGRyZXNzZWQgbGF0ZXIuCisKKyAgICAgICAgNC4gUmVtb3Zl
ZCBzb21lIHVudXNlZCBjb2RlIGFuZCBmaWVsZHMgSSBkaXNjb3ZlcmVkIHdoaWxlIHdvcmtpbmcg
b24KKyAgICAgICAgdGhpcywgc3RyaWN0bHkgc3BlYWtpbmcgdGhpcyBpcyBub3QgbmVjZXNzYXJ5
IGZvciB0aGUgZnVuY3Rpb25hbAorICAgICAgICBjaGFuZ2UuCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjpzdG9yZVZhbHVlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpp
c051bGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmlzTm90TnVsbCk6CisgICAg
ICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFR1cm5VbmRlZmluZWRJbnRvTnVsbCk6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6bm9PdmVybGFwKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpub092ZXJsYXBJbXBsKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjpub092ZXJsYXBJbXBsUmVnTWFzayk6CisgICAgICAgICogaml0L0dQUkluZm8uaDoK
KyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcyk6CisgICAgICAgIChKU0M6OkpJVDo6bGluayk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycyk6CisgICAgICAgICogaml0L0pJVC5o
OgorICAgICAgICAqIGppdC9KSVRBcml0aG1ldGljLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wSW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJl
VW5zaWduZWRBbmRKdW1wSW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlVW5z
aWduZWRJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX21vZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9j
b21wYXJlVW5zaWduZWRBbmRKdW1wKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVV
bnNpZ25lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3cpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcCk6CisgICAgICAgICogaml0L0pJ
VEFyaXRobWV0aWMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF91bnNpZ25l
ZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbmMpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZGVjKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVTZXR1cEZyYW1l
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgICogaml0L0pJVElubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFudE9wZXJhbmQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0
VmlydHVhbFJlZ2lzdGVyVGFnKToKKyAgICAgICAgKEpTQzo6bG9hZEFkZHJPZkNvZGVCbG9ja0Nv
bnN0YW50QnVmZmVyKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkQ29kZUJsb2NrQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudFBheWxvYWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudFRhZyk6CisgICAgICAgICogaml0
L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbW92KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2VuZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9u
ZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfamZhbHNlKToKKyAgICAgICAgKEpTQzo6SklUOjp2YWx1ZUlzRmFsc2V5R2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2plcV9udWxsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2puZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXFf
cHRyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2plcSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdHJ1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6dmFs
dWVJc1RydXRoeUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXEpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0RXEpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRj
aF9jaGFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9uZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b190aGlzKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmND
b21tb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5j
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2lzX2VtcHR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2Jvb2xlYW4pOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2lzX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX25vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdW5kZWZp
bmVkX29yX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3Jf
bnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXFfcHRyKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Vx
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lcSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9qZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcEVxSnVtcFNsb3cp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcSk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVPcFN0cmljdEVxSnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfanN0
cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX251bWJlcik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF90b19udW1lcmljKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3N0cmlu
Zyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19vYmplY3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9lbnRlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jaGVja190ZHopOgorICAg
ICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wdXRfZ2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9z
ZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0
ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29w
X3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0
X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVU
aHVuayk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3B1dF90b19hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9pbnRl
cm5hbF9maWVsZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcHJvcGVydHlfZW51
bWVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0V3JpdGVCYXJyaWVyKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaml0L0pTSW50ZXJmYWNlSklULmg6Cisg
ICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OnBvcFRodW5r
U3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOgorICAgICAgICAqIGpp
dC9UaHVua0dlbmVyYXRvcnMuaDoKKwogMjAyMS0xMS0wMiAgUm9zcyBLaXJzbGluZyAgPHJvc3Mu
a2lyc2xpbmdAc29ueS5jb20+CiAKICAgICAgICAgW0pTQ10gQWRkIExMSW50IGZhc3QgcGF0aCBm
b3IgT3BNb2Qgb24geDg2XzY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGFhZTEw
YmM0YjM2NWZjNjdhZWZlNzI3MTYwZDBiNTMzMmUxNTZhYTEuLmFlZDY0YTFhMDUxMjRjYWEwOGRl
ODVjODg4NWZmNzNhMzE5YzNmY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00
NzgzLDcgKzQ3ODMsNiBAQAogCQlBN0JGRjNCRjE3OTg2ODk0MDAwMkY0NjIgLyogREZHRmlsdHJh
dGlvblJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGaWx0cmF0
aW9uUmVzdWx0Lmg7IHBhdGggPSBkZmcvREZHRmlsdHJhdGlvblJlc3VsdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBN0MwQzRBQTE2N0MwOENEMDAxNzAxMUQgLyogSlNTY3JpcHRS
ZWYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTY3JpcHRSZWYu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0MwQzRBQjE2N0MwOENEMDAxNzAx
MUQgLyogSlNTY3JpcHRSZWZQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTU2NyaXB0UmVmUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlB
N0MxRThDODExMkU3MDFDMDBBMzdGOTggLyogSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdDMUVBRUIxNzk4N0FCNjAwMjk5
REIyIC8qIENMb29wU3RhY2tJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENMb29wU3RhY2tJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3
QzFFQUVDMTc5ODdBQjYwMDI5OURCMiAvKiBTdGFja1Zpc2l0b3IuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBsaW5lRW5kaW5nID0gMDsgcGF0aCA9IFN0YWNrVmlzaXRvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QzFFQUVEMTc5ODdBQjYwMDI5OURCMiAv
KiBTdGFja1Zpc2l0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhY2tW
aXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NDE3LDcgKzY0MTYsNiBA
QAogCQkJCTcyNkI5MUFGMjY1ODE2NTMwMDhFNkY4MiAvKiBKSVRQbGFuLmggKi8sCiAJCQkJNzIx
MzFCRjYyNjU4N0VGMjAwNzExNENGIC8qIEpJVFBsYW5TdGFnZS5oICovLAogCQkJCTg2Q0M4NUMz
MEVFN0E4OTQwMDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgKi8sCi0JCQkJQTdDMUU4
QzgxMTJFNzAxQzAwQTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwICovLAogCQkJ
CUZFM0EwNkI4MUMxMTAzRDkwMDM5MEZERCAvKiBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmNwcCAq
LywKIAkJCQlGRTNBMDZCOTFDMTEwM0Q5MDAzOTBGREQgLyogSklUUmlnaHRTaGlmdEdlbmVyYXRv
ci5oICovLAogCQkJCTcyMTMxQkYzMjY1ODdFRjIwMDcxMTRDRiAvKiBKSVRTYWZlcG9pbnQuY3Bw
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IDJkNWZjNGYzNTRiYmZkNGQ5OTE0
Y2IyYWMyMTcwNTFmNDMxZjExMzkuLmRkZWVmYjFiOTU1ZmE2OGU2NjZhMWY2NzRkNzZkZDUyNjlk
YjlmYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAgLTY1OSw3ICs2NTksNiBAQCBq
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAogaml0L0pJVE9wZXJhdGlvbnMuY3BwCiBqaXQvSklUUGxh
bi5jcHAKIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKLWppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAogaml0L0pJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuY3BwCiBqaXQvSklUU2FmZXBvaW50
LmNwcAogaml0L0pJVFNpemVTdGF0aXN0aWNzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmgKaW5kZXggMjQ0ZjIyMjc5MmM3MGY4MWFkMDc3MTA3YTE2NjMz
MmRjNzMxZWYwZi4uNDllZWY0NzBhOGI1NTEyZWU4MTU1Zjk4YTVmOTQ2NDllZWYyZDQ3MCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC0yNzYsNyAr
Mjc2LDE3IEBAIHB1YmxpYzoKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIodmFsdWUucGF5bG9h
ZCgpKSwgcmVncy5wYXlsb2FkR1BSKCkpOwogI2VuZGlmCiAgICAgfQotICAgIAorCisgICAgdm9p
ZCBzdG9yZVZhbHVlKEpTVmFsdWUgdmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICAgICAgc3RvcmU2NChJbW02NChKU1ZhbHVlOjplbmNvZGUodmFs
dWUpKSwgYWRkcmVzcyk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBzdG9yZTMy
KEltbTMyKHZhbHVlLnRhZygpKSwgYWRkcmVzcy53aXRoT2Zmc2V0KFRhZ09mZnNldCkpOworICAg
ICAgICBzdG9yZTMyKEltbTMyKHZhbHVlLnBheWxvYWQoKSksIGFkZHJlc3Mud2l0aE9mZnNldChQ
YXlsb2FkT2Zmc2V0KSk7CisjZW5kaWYKKyAgICB9CisKICAgICB2b2lkIHN0b3JlVHJ1c3RlZFZh
bHVlKEpTVmFsdWUgdmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKQEAgLTEwNDUsNiArMTA1NSwyNCBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKKyAg
ICB2b2lkIGlzTnVsbChKU1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgZHN0KQorICAgIHsKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ3MucGF5bG9hZEdQUigp
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgZHN0KTsKKyNlbGlmIFVTRShKU1ZB
TFVFMzJfNjQpCisgICAgICAgIGNvbXBhcmUzMihFcXVhbCwgcmVncy50YWdHUFIoKSwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpLCBkc3QpOworI2VuZGlmCisgICAgfQorCisgICAgdm9p
ZCBpc05vdE51bGwoSlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVnIGRzdCkKKyAgICB7CisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdzLnBheWxvYWRHUFIo
KSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIGRzdCk7CisjZWxpZiBVU0UoSlNW
QUxVRTMyXzY0KQorICAgICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ3MudGFnR1BSKCksIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSwgZHN0KTsKKyNlbmRpZgorICAgIH0KKwogICAg
IEp1bXAgYnJhbmNoSWZOdWxsKEdQUlJlZyBncHIpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQp
CkBAIC0xMTE0LDYgKzExNDIsMTcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYnJhbmNoVGVz
dFB0cihaZXJvLCBzdHJpbmdJbXBsR1BSLCBUcnVzdGVkSW1tMzIoSlNTdHJpbmc6OmlzUm9wZUlu
UG9pbnRlcikpOwogICAgIH0KIAorICAgIHZvaWQgZW1pdFR1cm5VbmRlZmluZWRJbnRvTnVsbChK
U1ZhbHVlUmVncyByZWdzKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzdGF0
aWNfYXNzZXJ0KChKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCAmIH5KU1ZhbHVlOjpVbmRlZmluZWRU
YWcpID09IEpTVmFsdWU6OlZhbHVlTnVsbCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+
SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVncy5wYXlsb2FkR1BSKCkpOworI2VsaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICAgICAgc3RhdGljX2Fzc2VydCgoSlNWYWx1ZTo6VW5kZWZpbmVkVGFn
IHwgMSkgPT0gSlNWYWx1ZTo6TnVsbFRhZyk7CisgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMyKDEp
LCByZWdzLnRhZ0dQUigpKTsKKyNlbmRpZgorICAgIH0KKwogICAgIHN0YXRpYyBBZGRyZXNzIGFk
ZHJlc3NGb3JCeXRlT2Zmc2V0KHB0cmRpZmZfdCBieXRlT2Zmc2V0KQogICAgIHsKICAgICAgICAg
cmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGJ5dGVPZmZzZXQpOwpA
QCAtMTg0NSw2ICsxODg0LDQ5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBzdG9yZVdhc21D
b250ZXh0SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCk7CiAjZW5kaWYKIAorICAg
IC8vIENoZWNrcyB0aGF0IHRoZSBnaXZlbiBsaXN0IG9mIEdQUlJlZ3MgYW5kIEpTVmFsdWVSZWdz
IGRvIG5vdCBvdmVybGFwLiBVc2UgdGhpcyBpbiBzdGF0aWMKKyAgICAvLyBhc3NlcnRpb25zIHRv
IGVuc3VyZSB0aGF0IHJlZ2lzdGVyIGFsaWFzZXMgbGl2ZSBhdCB0aGUgc2FtZSBwb2ludCBkbyBu
b3QgbWFwIHRvIHRoZSBzYW1lCisgICAgLy8gYXJjaGl0ZWN0dXJhbCByZWdpc3Rlci4KKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbm9P
dmVybGFwKEFyZ3MuLi4gYXJncykgeyByZXR1cm4gbm9PdmVybGFwSW1wbCgwLCBhcmdzLi4uKTsg
fQorCitwcml2YXRlOgorICAgIC8vIEJhc2UgY2FzZQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4u
LiBBcmdzPgorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBub092ZXJsYXBJbXBsKHVpbnQ2NF90
KSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBHUFJSZWcgY2FzZQorICAgIHRlbXBsYXRlIDx0
eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBub092ZXJsYXBJbXBs
KHVpbnQ2NF90IHVzZWQsIFJlZ2lzdGVySUQgZ3ByLCBBcmdzLi4uIGFyZ3MpCisgICAgeworICAg
ICAgICB1bnNpZ25lZCBtYXNrID0gbm9PdmVybGFwSW1wbFJlZ01hc2soZ3ByKTsKKyAgICAgICAg
aWYgKHVzZWQgJiBtYXNrKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1
cm4gbm9PdmVybGFwSW1wbCh1c2VkIHwgbWFzaywgYXJncy4uLik7CisgICAgfQorCisgICAgLy8g
SlNWYWx1ZVJlZ3MgY2FzZQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBub092ZXJsYXBJbXBsKHVpbnQ2NF90IHVzZWQsIEpTVmFsdWVS
ZWdzIGpzciwgQXJncy4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbWFzayA9IG5v
T3ZlcmxhcEltcGxSZWdNYXNrKGpzci5wYXlsb2FkR1BSKCkpOworI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCisgICAgICAgIG1hc2sgfD0gbm9PdmVybGFwSW1wbFJlZ01hc2soanNyLnRhZ0dQUigpKTsK
KyNlbmRpZgorICAgICAgICBpZiAodXNlZCAmIG1hc2spCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHJldHVybiBub092ZXJsYXBJbXBsKHVzZWQgfCBtYXNrLCBhcmdzLi4uKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG5vT3ZlcmxhcEltcGxSZWdN
YXNrKFJlZ2lzdGVySUQgZ3ByKQorICAgIHsKKyAgICAgICAgaWYgKGdwciA9PSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICAgICAgcmV0dXJuIDBVTEw7CisgICAgICAgIHVuc2lnbmVkIGJpdCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihncHIpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChiaXQgPCBz
aXplb2YodWludDY0X3QpICogQ0hBUl9CSVQpOworICAgICAgICByZXR1cm4gMVVMTCA8PCBiaXQ7
CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlckltcGwoR1BSUmVnIGNhbGxlZVNhdmVzQnVmZmVyKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAppbmRleCBmZDkwOTVkM2ZiNzc1NWZkNGRjNzA0MTlj
N2VhY2ZiNGY3NTZjNmU0Li4yZjhlNTQ0NzNmNzIxM2M5MmQ4ODZhMTk2YWUyYzkxYzFlNDQ2ZGM5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaApAQCAtOTIzLDEzICs5MjMsNDMgQEAg
cHVibGljOgogCiAjZW5kaWYgLy8gQ1BVKFJJU0NWNjQpCiAKKy8vIFRvIG1ha2Ugc29tZSBjb2Rl
IGdlbmVyaWMgb3ZlciBib3RoIEpTVkFMVUU2NCBhbmQgSlNWQUxVRTMyXzY0IHBsYXRmb3Jtcywg
d2UgdXNlIHN0YW5kYXJkIG5hbWVzCisvLyBmb3IgY2VydGFpbiBKU1ZhbHVlUmVncyBpbnN0YW5j
ZXMuIE9uIEpTVkFMVUU2NCwgYSBKU1ZhbHVlUmVncyBjb3JyZXNwb25kcyB0byBhIHNpbmdsZSA2
NC1iaXQKKy8vIGFyY2hpdGVjdHVyYWwgR1BSLCB3aGlsZSBvbiBKU1ZBTFVFMzJfNjQsIGEgSlNW
YWx1ZVJlZ3MgY29ycmVzcG9uZHMgdG8gYSBwYWlyIG9mIDMyLWJpdAorLy8gYXJjaGl0ZWN0dXJh
bCBHUFJzLiBOZXZlcnRoZWxlc3MsIGEgbG90IG9mIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhl
IHRhcmdldHMgY2FuIGJlIGFic3RyYWN0ZWQKKy8vIG92ZXIgdXNpbmcgdGhlIGZvbGxvd2luZyBh
bGlhc2VzLiBTZWUgQXNzZW1ibHlIZWxwZXI6Om5vT3ZlcmxhcCBmb3IgY2F0Y2hpbmcgY29uZmxp
Y3RpbmcgcmVnaXN0ZXIKKy8vIGFsaWFzaW5nIHN0YXRpY2FsbHkuCitjbGFzcyBKU1JJbmZvIHsK
K3B1YmxpYzoKKyAgICAvLyBUZW1wb3JhcnkgcmVnaXN0ZXJzLgorICAgIC8vIE9uIEpTVkFMVUU2
NCwganNSZWdUezIqbisxfXsyKm59IGFsd2F5cyBtYXBzIG9uZS10by1vbmUgdG8gR1BSIHJlZ1R7
MipufQorICAgIC8vIE9uIEpTVkFMVUUzMl82NCwganNSZWdUezIqbisxfXsyKm59IGFsd2F5cyBt
YXBzIHRvIHRoZSBHUFIgcGFpciByZWdUezIqbisxfSAvIHJlZ1R7MipufQorICAgIC8vIFRoaXMg
bWFwcGluZyBpcyBkZWxpYmVyYXRlbHkgc2ltcGxlIHRvIGVhc2UgcmVhc29uaW5nIGFib3V0IGFs
aWFzaW5nLiBFLmcuOgorICAgIC8vIFNlZWluZyAnanNSZWdUMTAnIGluZGljYXRlcyB0aGF0IGlu
IGdlbmVyYWwgYm90aCAncmVnVDEnIGFuZCAncmVnVDAnIG1heSBiZSB1c2VkLgorI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgc3RhdGljIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBqc1JlZ1QxMCB7IEdQ
UkluZm86OnJlZ1QwIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBqc1JlZ1Qz
MiB7IEdQUkluZm86OnJlZ1QyIH07CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHN0YXRp
YyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MganNSZWdUMTAgeyBHUFJJbmZvOjpyZWdUMSwgR1BSSW5m
bzo6cmVnVDAgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIEpTVmFsdWVSZWdzIGpzUmVnVDMyIHsg
R1BSSW5mbzo6cmVnVDMsIEdQUkluZm86OnJlZ1QyIH07CisjZW5kaWYKKworICAgIC8vIFJldHVy
biB2YWx1ZSByZWdpc3RlcgorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBKU1ZhbHVlUmVncyByZXR1cm5WYWx1ZUpTUiB7IEdQUkluZm86OnJldHVyblZhbHVlR1BSIH07
CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJl
Z3MgcmV0dXJuVmFsdWVKU1IgeyBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSIH07CisjZW5kaWYKK307CisKIC8vIFRoZSBiYXNlbGluZSBKSVQgdXNlcyAi
YWNjdW11bGF0b3IiIHN0eWxlIGV4ZWN1dGlvbiB3aXRoIHJlZ1QwIChmb3IgNjQtYml0KQogLy8g
YW5kIHJlZ1QwICsgcmVnVDEgKGZvciAzMi1iaXQpIHNlcnZpbmcgYXMgdGhlIGFjY3VtdWxhdG9y
IHJlZ2lzdGVyKHMpIGZvcgogLy8gcGFzc2luZyByZXN1bHRzIG9mIG9uZSBvcGNvZGUgdG8gdGhl
IG5leHQuIEhlbmNlOgotQ09NUElMRV9BU1NFUlQoR1BSSW5mbzo6cmVnVDAgPT0gR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIHJlZ1QwX211c3RfZXF1YWxfcmV0dXJuVmFsdWVHUFIpOworc3RhdGlj
X2Fzc2VydChHUFJJbmZvOjpyZWdUMCA9PSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAjaWYg
VVNFKEpTVkFMVUUzMl82NCkKLUNPTVBJTEVfQVNTRVJUKEdQUkluZm86OnJlZ1QxID09IEdQUklu
Zm86OnJldHVyblZhbHVlR1BSMiwgcmVnVDFfbXVzdF9lcXVhbF9yZXR1cm5WYWx1ZUdQUjIpOwor
c3RhdGljX2Fzc2VydChHUFJJbmZvOjpyZWdUMSA9PSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIp
OwogI2VuZGlmCitzdGF0aWNfYXNzZXJ0KEpTUkluZm86OmpzUmVnVDEwID09IEpTUkluZm86OnJl
dHVyblZhbHVlSlNSKTsKIAogaW5saW5lIEdQUlJlZyBleHRyYWN0UmVzdWx0KEdQUlJlZyByZXN1
bHQpIHsgcmV0dXJuIHJlc3VsdDsgfQogI2lmIFVTRShKU1ZBTFVFNjQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAKaW5kZXggOTI5NDI0NjA3MzQwMDkxMWI2YzM1N2M3OGE0YTBjNmE3NGU5YWFk
NC4uNjFmY2JiODFjMTM1ZDFkYWQ4NmM0OWE2NjEzMWU3ZjEyZDBjMDU2MyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcApAQCAtNjQ0LDkgKzY0NCw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9kZWxfYnlfdmFs
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZGVsX2J5X2lkKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3Bfc3ViKQotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2dldF9mcm9tX3Njb3BlKQotI2VuZGlmCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9wdXRfdG9fc2NvcGUpCiAKICAgICAgICAgREVGSU5F
X1NMT1dDQVNFX09QKG9wX2l0ZXJhdG9yX29wZW4pCkBAIC04MTUsMTMgKzgxMiw4IEBAIHZvaWQg
SklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCkKICAgICAgICAgICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25z
dHJ1Y3RvcigpICYmICFhcmd1bWVudCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNs
dWRpbmdUaGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBjb25zdGV4cHIgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyB7IHJlZ1QwIH07Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAg
ICAgICAgICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXN1bHRSZWdzIHsgcmVnVDEsIHJlZ1Qw
IH07Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBsb2FkVmFsdWUoQWRkcmVzcyhjYWxsRnJhbWVS
ZWdpc3Rlciwgb2Zmc2V0KSwgcmVzdWx0UmVncyk7Ci0gICAgICAgICAgICAgICAgc3RvcmVWYWx1
ZShyZXN1bHRSZWdzLCBBZGRyZXNzKHJlZ1QyLCBhcmd1bWVudCAqIHNpemVvZihWYWx1ZVByb2Zp
bGUpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKKyAgICAgICAgICAg
ICAgICBsb2FkVmFsdWUoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSwganNSZWdU
MTApOworICAgICAgICAgICAgICAgIHN0b3JlVmFsdWUoanNSZWdUMTAsIEFkZHJlc3MocmVnVDIs
IGFyZ3VtZW50ICogc2l6ZW9mKFZhbHVlUHJvZmlsZSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9m
Rmlyc3RCdWNrZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTAx
OSwxMSArMTAxMSw3IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICBtX2ppdENvZGUtPm1faml0Q29k
ZU1hcCA9IGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXplKCk7CiAgICAgbV9qaXRDb2RlLT5hZG9w
dE1hdGhJQ3MobV9tYXRoSUNzKTsKICAgICBtX2ppdENvZGUtPm1fY29uc3RhbnRQb29sID0gV1RG
TW92ZShtX2NvbnN0YW50UG9vbCk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICBtX2ppdENvZGUt
Pm1faXNTaGFyZWFibGUgPSBtX2lzU2hhcmVhYmxlOwotI2Vsc2UKLSAgICBtX2ppdENvZGUtPm1f
aXNTaGFyZWFibGUgPSBmYWxzZTsKLSNlbmRpZgogCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJi
b3NlKQogICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAs
ICVwKS5cbiIsIG1fdW5saW5rZWRDb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCkt
PnN0YXJ0KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCku
dW50YWdnZWRQdHIoKSk7CkBAIC0xMDgwLDcgKzEwNjgsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVFeGNlcHRpb25IYW5kbGVycygpCiAgICAgfQogCiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNo
ZWNrcy5lbXB0eSgpKSB7Ci0gICAgICAgIG1fZXhjZXB0aW9uSGFuZGxlciA9IGxhYmVsKCk7CiAg
ICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmxpbmsodGhpcyk7CiAKICAgICAgICAgY29weUNhbGxl
ZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IGRlMmM1Y2U3NzBiYmQ1OTNiN2FlNWZkMWE2NTI2
NzM4OTQzZGQ5YTEuLjFjNjQ5NjNmMGU5NDEzMjk4Mzk1NTZjNmIyZWZmZjcyZmQ1YWNhZDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtMjU0LDcgKzI1NCwxMSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBsb2FkQ29uc3RhbnQodW5zaWduZWQgY29uc3RhbnRJbmRleCwgR1BS
UmVnKTsKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGxvYWRHbG9iYWxPYmplY3QoR1BSUmVn
KTsKLSAgICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyLCBH
UFJSZWcpOworICAgICAgICB2b2lkIGxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0
ZXIsIEpTVmFsdWVSZWdzKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICB2b2lkIGxv
YWRDb2RlQmxvY2tDb25zdGFudFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKTsK
KyAgICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnRUYWcoVmlydHVhbFJlZ2lzdGVyLCBS
ZWdpc3RlcklEKTsKKyNlbmRpZgogCiAgICAgICAgIHZvaWQgZW1pdFB1dENvZGVCbG9ja1RvRnJh
bWVJblByb2xvZ3VlKEdQUlJlZyByZXN1bHQgPSByZWdUMCk7CiAKQEAgLTM0OCw5ICszNTIsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAg
IFByaXZhdGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZChPcCk7CiAKLSAgICAgICAg
ZW51bSBGaW5hbE9iamVjdE1vZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07Ci0KICAg
ICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIEpT
VmFsdWVSZWdzIGRzdCk7CisgICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxv
YWQoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpOwogICAgICAgICB2b2lkIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3Mgc3Jj
KTsKICAgICAgICAgdm9pZCBlbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyLCBjb25zdCBKU1ZhbHVl
IGNvbnN0YW50LCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7CiAKQEAgLTM2
MSwzMyArMzY0LDI1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGdldE9wZXJhbmRD
b25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBWaXJ0
dWFsUmVnaXN0ZXImIG9wLCBpbnQzMl90JiBjb25zdGFudCk7CiAKICAgICAgICAgdm9pZCBlbWl0
TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7Ci0gICAgICAg
IHZvaWQgZW1pdExvYWRUYWcoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZyk7Ci0gICAg
ICAgIHZvaWQgZW1pdExvYWRQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXls
b2FkKTsKIAotICAgICAgICB2b2lkIGVtaXRMb2FkKGNvbnN0IEpTVmFsdWUmIHYsIFJlZ2lzdGVy
SUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQpOwotICAgICAgICB2b2lkIGVtaXRMb2FkKFZpcnR1
YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJ
RCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRMb2FkMihWaXJ0
dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwgVmlydHVh
bFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpOworICAgICAg
ICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0
ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCk7CisgICAgICAgIHZvaWQgZW1pdEdldFZpcnR1
YWxSZWdpc3RlclRhZyhWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCk7CiAKICAg
ICAgICAgdm9pZCBlbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZywgUmVn
aXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7CiAg
ICAgICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBh
eWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyID0gZmFsc2UpOwotICAgICAgICB2b2lkIGVtaXRTdG9y
ZUludDMyKFZpcnR1YWxSZWdpc3RlciwgVHJ1c3RlZEltbTMyIHBheWxvYWQsIGJvb2wgaW5kZXhJ
c0ludDMyID0gZmFsc2UpOwogICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoVmlydHVhbFJlZ2lz
dGVyLCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0NlbGwgPSBmYWxzZSk7CiAgICAg
ICAgIHZvaWQgZW1pdFN0b3JlQm9vbChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9h
ZCwgYm9vbCBpbmRleElzQm9vbCA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVEb3Vi
bGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgdmFsdWUpOwogCiAgICAgICAgIHZvaWQg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIHZv
aWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJ
RCB0YWcpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3Rl
cklEKTsKIAotICAgICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90UGF0aChjb25zdCBJZGVudGlm
aWVyKik7Ci0KICAgICAgICAgLy8gQXJpdGhtZXRpYyBvcGNvZGUgaGVscGVycwogICAgICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdEJpbmFyeURvdWJsZU9wKGNv
bnN0IEluc3RydWN0aW9uICosIE9wZXJhbmRUeXBlcywgSnVtcExpc3QmIG5vdEludDMyT3AxLCBK
dW1wTGlzdCYgbm90SW50MzJPcDIsIGJvb2wgb3AxSXNJblJlZ2lzdGVycyA9IHRydWUsIGJvb2wg
b3AySXNJblJlZ2lzdGVycyA9IHRydWUpOwogCiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQog
ICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywg
UmVnaXN0ZXJJRCBkc3QpOwotICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKFZp
cnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxSZWdpc3RlciBzcmMy
LCBSZWdpc3RlcklEIGRzdDIpOwogICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOwogICAgICAgICB2
b2lkIGVtaXRTdG9yZUNlbGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBwYXlsb2Fk
LCBib29sIC8qIG9ubHkgdXNlZCBpbiBKU1ZhbHVlMzJfNjQgKi8gPSBmYWxzZSkKICAgICAgICAg
ewpAQCAtNDAzLDkgKzM5OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNs
b3dDYXNlSWZOb3ROdW1iZXIoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQgc2NyYXRjaCk7
Ci0KLSAgICAgICAgdm9pZCBjb21waWxlR2V0QnlJZEhvdFBhdGgoVmlydHVhbFJlZ2lzdGVyIGJh
c2VSZWcsIGNvbnN0IElkZW50aWZpZXIqKTsKLQogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQp
CiAKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoSlNWYWx1ZVJlZ3Mp
OwpAQCAtNjQ3LDkgKzYzOSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRf
b3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBl
bWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
Ci0jZW5kaWYKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAKICAgICAgICAg
dm9pZCBlbWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYsIFNsb3dQYXRoRnVuY3Rpb24pOwpAQCAtNjcxLDIxICs2NjAsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnKTsKICAgICAgICAgdm9pZCBlbWl0VmFy
UmVhZE9ubHlDaGVjayhSZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpOwotICAgICAgICB2
b2lkIGVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsK
LSAgICAgICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJl
Zyk7Ci0gICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoq
IG9wZXJhbmQsIEdQUlJlZyk7Ci0jZWxzZQotICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5k
aXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9h
ZCk7Ci0gICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQs
IEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkKTsKLSNlbmRpZgotICAgICAgICB2b2lkIGVtaXRH
ZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOwog
ICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZv
aWQgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KTsKLSAgICAg
ICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7Ci0gICAgICAgIHZvaWQgZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKLSAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3Vy
ZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKIAogICAgICAgICB2b2lkIGVtaXRJbml0UmVn
aXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIApAQCAtNzMzLDE0ICs3MDksMTMgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gdmFsdWVJc0ZhbHNleUdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZN
Jik7Ci0KKyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAgICAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfZnJvbV9z
Y29wZUdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mKTsKICAg
ICAgICAgdGVtcGxhdGUgPFJlc29sdmVUeXBlPgogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0m
KTsKICAgICAgICAgdGVtcGxhdGUgPFJlc29sdmVUeXBlPgogICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1
bmsoVk0mKTsKLSNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgICAgICBK
dW1wIGdldFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiAg
ICAgICAgIHsKQEAgLTk4Nyw5ICs5NjIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBK
dW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrczsKICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25D
aGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2s7Ci0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQotICAgICAgICBMYWJlbCBtX2V4Y2VwdGlvbkhhbmRsZXI7Ci0jZW5kaWYKIAogICAgICAgICB1
bnNpZ25lZCBtX2dldEJ5SWRJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1f
Z2V0QnlWYWxJbmRleCB7IFVJTlRfTUFYIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRBcml0aG1ldGljLmNwcAppbmRleCA4ZjFhN2M1YjgzNDYxMGFhMGI4YWZjODMxN2I5MWNkZTAx
NzRlNmIzLi44ZjRkODBiOTljZmM5ZTkxZmUyMzNkNGJlOTI2ZjU2MzdmNjZlYzZlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKQEAgLTIxMCw3ICsyMTAs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9w
MSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMiwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7
CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QxKTsKIApAQCAtMjM4LDcgKzIzOSw4
IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvCiAgICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0
T3BlcmFuZENvbnN0YW50SW50KG9wMSk7CiAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0
ZShjb25kaXRpb24pLCByZWdUMSwgSW1tMzIob3AxaW1tKSksIHRhcmdldCk7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdU
MSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7CiAgICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwogICAgIH0KIH0KQEAgLTI2
NCw3ICsyNjYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxS
ZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcgogICAgICAgICBpbnQzMl90IG9w
MWltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDEpOwogICAgICAgICBjb21wYXJlMzIoY29t
bXV0ZShjb25kaXRpb24pLCByZWdUMCwgSW1tMzIob3AxaW1tKSwgcmVnVDApOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVn
VDEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwogICAgICAgICBjb21wYXJlMzIo
Y29uZGl0aW9uLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKICAgICB9CiAgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKQEAgLTQyMiw3ICs0MjUsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBBU1NFUlQocmVnVDQgIT0gZWR4KTsKICAgICBBU1NFUlQocmVnVDQgIT0gZWN4KTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDQsIG9wMiwgZWN4KTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDQpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AyLCBlY3gpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUNCk7CiAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KGVjeCk7CiAKQEAgLTQ4MCw3ICs0ODQsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IFJlbGF0aW9uYWxDb25kaXRpbwogCiAgICAgLy8gQ2hhcmFjdGVyIGxlc3MuCiAgICAgaWYgKGlz
T3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7Ci0gICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDEs
IHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxLCByZWdU
MCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMSkpOwogICAgICAg
ICBKdW1wTGlzdCBmYWlsdXJlczsKICAgICAgICAgZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcocmVn
VDAsIHJlZ1QwLCBmYWlsdXJlcyk7CkBAIC00ODksNyArNDkzLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFs
Q29uZGl0aW8KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRDaGFyKG9wMikpIHsKLSAgICAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAgICAgICAgIEp1bXBMaXN0IGZh
aWx1cmVzOwogICAgICAgICBlbWl0TG9hZENoYXJhY3RlclN0cmluZyhyZWdUMCwgcmVnVDAsIGZh
aWx1cmVzKTsKQEAgLTQ5OCwxNSArNTAyLDE2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvCiAg
ICAgICAgIHJldHVybjsKICAgICB9IAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEp
KSB7Ci0gICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAgICAgIG5vdEludDMyT3Ay
LmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1QzKSk7CiAgICAgICAgIGFkZEp1bXAoYnJhbmNo
MzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMiwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9w
MSkuYXNJbnQzMigpKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFu
dEludChvcDIpKSB7Ci0gICAgICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgICAgIG5v
dEludDMyT3AxLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1QxKSk7CiAgICAgICAgIGFkZEp1
bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9w
MikuYXNJbnQzMigpKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdExvYWQy
KG9wMSwgcmVnVDEsIHJlZ1QwLCBvcDIsIHJlZ1QzLCByZWdUMik7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICAgICAgbm90SW50MzJPcDEuYXBwZW5k
KGJyYW5jaElmTm90SW50MzIocmVnVDEpKTsKICAgICAgICAgbm90SW50MzJPcDIuYXBwZW5kKGJy
YW5jaElmTm90SW50MzIocmVnVDMpKTsKICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRp
b24sIHJlZ1QwLCByZWdUMiksIHRhcmdldCk7CkBAIC01MzMsMTMgKzUzOCwxNCBAQCB2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgUmVsYXRpb25hbAogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0
YW50SW50KG9wMSkpIHsKLSAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOworICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICAgICAg
YWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QyLCBJbW0zMihnZXRDb25z
dGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCkpKSwgdGFyZ2V0KTsKICAgICB9IGVsc2UgaWYgKGlz
T3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdExvYWQob3AxLCByZWdUMSwg
cmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDEsIHJlZ1Qw
KTsKICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihnZXRD
b25zdGFudE9wZXJhbmQob3AyKS5hc0ludDMyKCkpKSwgdGFyZ2V0KTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBlbWl0TG9hZDIob3AxLCByZWdUMSwgcmVnVDAsIG9wMiwgcmVnVDMsIHJlZ1QyKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMywgcmVnVDIpOwogICAgICAgICBh
ZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsKICAgICB9
CiB9CkBAIC01NTMsMTMgKzU1OSwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aQogICAgIFZp
cnR1YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAogICAgIGlmIChpc09wZXJhbmRD
b25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAg
ICAgIGNvbXBhcmUzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QyLCBJbW0zMihnZXRDb25zdGFu
dE9wZXJhbmQob3AxKS5hc0ludDMyKCkpLCByZWdUMCk7CiAgICAgfSBlbHNlIGlmIChpc09wZXJh
bmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1Qw
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7CiAg
ICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihnZXRDb25zdGFudE9wZXJh
bmQob3AyKS5hc0ludDMyKCkpLCByZWdUMCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdExv
YWQyKG9wMSwgcmVnVDEsIHJlZ1QwLCBvcDIsIHJlZ1QzLCByZWdUMik7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMSwgcmVnVDApOworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICAgICAgY29tcGFyZTMyKGNvbmRp
dGlvbiwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgfQogICAgIGVtaXRTdG9yZUJvb2woZHN0
LCByZWdUMCk7CkBAIC01NzUsOCArNTgyLDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW8KIAog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCBy
ZWdUMCk7Ci0gICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AyLCByZWdUMywgcmVnVDIpOwogICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJh
bmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7CkBAIC02MDQsNyArNjExLDcgQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcChjb25z
dCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIE9wZXJhbmRUeXBlcyB0eXBlcywKICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6Okxvd2VzdFRhZykpKTsKIAogICAgICAgICBpZiAoIW9wMklzSW5SZWdpc3RlcnMpCi0gICAg
ICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7CisgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDMsIHJlZ1QyKTsKIAogICAgICAgICBKdW1wIGRvdWJs
ZU9wMiA9IGJyYW5jaDMyKEJlbG93LCByZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2Vz
dFRhZykpOwogCkBAIC02NjgsNyArNjc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3VibGVP
cChjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIE9wZXJhbmRUeXBlcyB0eXBlcywKICAg
ICAgICAgQVNTRVJUKG9wMklzSW5SZWdpc3RlcnMpOwogCiAgICAgICAgIGlmICghb3AxSXNJblJl
Z2lzdGVycykKLSAgICAgICAgICAgIGVtaXRMb2FkUGF5bG9hZChvcDEsIHJlZ1QwKTsKKyAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKG9wMSwgcmVnVDApOwogCiAgICAg
ICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwCmluZGV4IDIyNWUxNGEx
YmUwOGFiZDU1MGFkNjNjNDVlYjUxYTFjNDYyZTFjMjAuLjJkZGJjYjMwNjhiZWQ5Yjc1ODc0NTgx
M2RjNTU0M2VlZTk4ZDVhM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQXJpdGhtZXRpYzMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VEFyaXRobWV0aWMzMl82NC5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
dW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKLSAgICBlbWl0TG9hZChvcDEsIHJlZ1Qx
LCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7
CiAgICAgCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RJbnQzMihyZWdUMSkpOwogICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwgVHJ1c3RlZEltbTMyKDApKSk7CkBA
IC01OSw3ICs1OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luYyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSW5jPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5t
X3NyY0RzdDsKIAotICAgIGVtaXRMb2FkKHNyY0RzdCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDEsIHJlZ1QwKTsKIAogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90SW50MzIocmVnVDEpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQz
MihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwpAQCAtNzEsNyArNzEsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKLSAgICBl
bWl0TG9hZChzcmNEc3QsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmNEc3QsIHJlZ1QxLCByZWdUMCk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdElu
dDMyKHJlZ1QxKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0
ZWRJbW0zMigxKSwgcmVnVDApKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCmlu
ZGV4IDA5MTk5MTU4NDY4YzBmZTEwMmI1ZGZiZmEyYmU0ZmUxNzMxOTdlMmIuLmMzODYxMTk3Nzdh
ZjEwMTkwNDM0OGQ0ZTA1ZTNiYTYwMzczMTIyMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDYWxsLmNwcApAQCAtNDMsMTggKzQzLDEyIEBACiBuYW1lc3BhY2UgSlNDIHsKIAogbmFtZXNw
YWNlIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXR1
cm5WYWx1ZUpTUiB7IEdQUkluZm86OnJldHVyblZhbHVlR1BSIH07Ci0gICAgY29uc3RleHByIEpT
VmFsdWVSZWdzIGNhbGxlZUpTUiB7IEdQUkluZm86OnJlZ1QwIH07Ci0jZWxpZiBVU0UoSlNWQUxV
RTMyXzY0KQotICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXR1cm5WYWx1ZUpTUiB7IEdQUklu
Zm86OnJldHVyblZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIgfTsKLSAgICBjb25z
dGV4cHIgSlNWYWx1ZVJlZ3MgY2FsbGVlSlNSIHsgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJl
Z1QwIH07Ci0jZW5kaWYKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgY2FsbGVlSlNSID0gSlNS
SW5mbzo6anNSZWdUMTA7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIHN0YXRpY19hc3NlcnQoIXJldHVyblZh
bHVlSlNSLnVzZXMoY2FsbEZyYW1lUmVnaXN0ZXIpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG5vT3Zl
cmxhcChyZXR1cm5WYWx1ZUpTUiwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKIAogICAgIC8vIFJldHVy
biB0aGUgcmVzdWx0IGluIHJldHVyblZhbHVlR1BSIChyZXR1cm5WYWx1ZUdQUjIvcmV0dXJuVmFs
dWVHUFIgb24gMzItYml0KS4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFJldD4oKTsKQEAgLTE0MSwyMCArMTM1LDE0IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJh
bWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5r
SW5mCiAjZW5kaWYKIAogICAgIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBjb25zdGV4
cHIgSlNWYWx1ZVJlZ3MgYXJndW1lbnRzSlNSIHsgcmVnVDIgfTsKLSNlbGlmIFVTRShKU1ZBTFVF
MzJfNjQpCi0gICAgICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBhcmd1bWVudHNKU1IgeyByZWdU
MywgcmVnVDIgfTsKLSNlbmRpZgotCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJn
dW1lbnRzLCBhcmd1bWVudHNKU1IpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFy
Z3VtZW50cywganNSZWdUMzIpOwogICAgICAgICBGX0pJVE9wZXJhdGlvbl9HRkpaWiBzZXR1cE9w
ZXJhdGlvbjsKICAgICAgICAgaWYgKE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHMpCiAgICAgICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVw
Rm9yd2FyZEFyZ3VtZW50c0ZyYW1lOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzZXR1cE9w
ZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lOwogICAgICAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1Q0KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgcmVn
VDQsIHJlZ1QxLCBhcmd1bWVudHNKU1IsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIHJlZ1Q0LCByZWdUMSwganNSZWdUMzIs
IGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CiAgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIs
IHJlZ1Q1KTsKICAgICB9CiAKQEAgLTE2Nyw3ICsxNTUsNyBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZy
YW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlu
a0luZgogICAgIG5vdEJpZ2dlc3QubGluayh0aGlzKTsKICAgICAKICAgICAvLyBJbml0aWFsaXpl
ICd0aGlzJy4KLSAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgdGhpc0pTUiA9IGNhbGxlZUpTUjsg
Ly8gVXNlZCBhcyB0ZW1wb3JhcnkgcmVnaXN0ZXIKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3Mg
dGhpc0pTUiA9IGpzUmVnVDEwOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZhbHVl
LCB0aGlzSlNSKTsKICAgICBzdG9yZVZhbHVlKHRoaXNKU1IsIEFkZHJlc3MocmVnVDUsIENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdp
c3RlcikpKSk7CiAKQEAgLTMxMiw3ICszMDAsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZAog
CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAvLyBXZSBuZWVkIHRoaXMgb24gSlNWQUxVRTMy
XzY0IG9ubHkgYXMgb24gSlNWQUxVRTY0IGEgcG9pbnRlciBjb21wYXJpc29uIGluIHRoZSBEYXRh
SUMgZmFzdAotICAgIC8vIHBhdGNoIGNhdGNoZXMgdGhpcy4KKyAgICAvLyBwYXRoIGNhdGNoZXMg
dGhpcy4KICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwoY2FsbGVlSlNSKSk7CiAjZW5k
aWYKIApAQCAtNDc3LDcgKzQ2NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4o
Y29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogICAgIHVzaW5nIEJhc2VsaW5lR2V0QnlJ
ZFJlZ2lzdGVyczo6cmVzdWx0SlNSOwogICAgIHVzaW5nIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVy
czo6c3R1YkluZm9HUFI7CiAKLSAgICBzdGF0aWNfYXNzZXJ0KCFyZXR1cm5WYWx1ZUpTUi51c2Vz
KHN0dWJJbmZvR1BSKSk7CisgICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAocmV0dXJuVmFsdWVK
U1IsIHN0dWJJbmZvR1BSKSk7CiAgICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUpTUiA9PSBi
YXNlSlNSKTsgLy8gT3RoZXJ3aXNlIHdpbGwgbmVlZCBtb3ZlKHJldHVyblZhbHVlSlNSLCBiYXNl
SlNSKQogICAgIHN0YXRpY19hc3NlcnQoYmFzZUpTUiA9PSByZXN1bHRKU1IpOwogCkBAIC01ODIs
NyArNTcwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24pCiAgICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKIAogICAg
IC8vIGNhbGwgcmVzdWx0ICh7IGRvbmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1QwICAocmVn
VDEvcmVnVDAgb3IgMzItYml0KQotICAgIHN0YXRpY19hc3NlcnQoIXJldHVyblZhbHVlSlNSLnVz
ZXMoc3R1YkluZm9HUFIpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChyZXN1bHRKU1Is
IHN0dWJJbmZvR1BSKSk7CiAKICAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgaXRlckNhbGxSZXN1
bHRKU1IgPSBkb250Q2xvYmJlckpTUjsKICAgICBtb3ZlVmFsdWVSZWdzKHJldHVyblZhbHVlSlNS
LCBpdGVyQ2FsbFJlc3VsdEpTUik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
CmluZGV4IGQ2MDJmYzkyNmM5MzI5ZTIxMmE0ZDUwN2ZkODZkMDc4YWJhN2JhMWEuLmRiODE5MDdm
OWIwNDQwZjY3YmZjZDg2MmRjOGE0ZTI4Y2Y5Yjg1NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lcy5oCkBAIC02NSwxMiArNjUsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklU
Ojppc0tub3duQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogQUxXQVlTX0lOTElORSBKU1ZhbHVl
IEpJVDo6Z2V0Q29uc3RhbnRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgQVNT
RVJUKHNyYy5pc0NvbnN0YW50KCkpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgcmV0dXJu
IG1fcHJvZmlsZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0jZWxzZQogICAgIFJFTEVB
U0VfQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKHNyYykgIT0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50
KTsKICAgICByZXR1cm4gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSNl
bmRpZgogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVI
ZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCkBAIC0xNjcsMzUg
KzE2MywyMiBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5k
Q2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aQogQUxXQVlTX0lOTElORSBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1
YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKLSNlbHNlCi0g
ICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7Ci0jZW5k
aWYKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVKU1IpOwogICAg
IHJldHVybiBjYWxsOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChBZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0dWFs
UmVnaXN0ZXIgZHN0KQogewogICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rp
b24pOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJldHVyblZhbHVlR1BSKTsKLSNlbHNlCi0gICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVH
UFIyLCByZXR1cm5WYWx1ZUdQUik7Ci0jZW5kaWYKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmV0dXJuVmFsdWVKU1IpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4K
IEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBi
eXRlY29kZSwgY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmly
dHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7Ci0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKLSNlbHNlCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFs
dWVHUFIyLCByZXR1cm5WYWx1ZUdQUikpOwotICAgIGVtaXRTdG9yZShkc3QsIHJldHVyblZhbHVl
R1BSMiwgcmV0dXJuVmFsdWVHUFIpOwotI2VuZGlmCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZSwgcmV0dXJuVmFsdWVKU1IpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZXR1cm5WYWx1ZUpTUik7CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKQEAgLTIwMywxMyAr
MTg2LDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgQnl0ZWNvZGU+CiBBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9m
aWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJl
Z2lzdGVyIGRzdCkKIHsKICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9u
KTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIHJldHVyblZhbHVlR1BSKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOwotI2Vsc2UKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7Ci0gICAgZW1p
dFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7Ci0jZW5kaWYKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUpTUik7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlSlNSKTsKIH0KIAogQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKQEAgLTMzMiwxMiAr
MzEwLDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZp
cnR1YWxSZWdpc3RlciBzcmMpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIGlubGluZSBzdGQ6OmVu
YWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSks
IFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJ
ZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQogewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0IHsgcmVnVDAgfTsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0IHsgcmVnVDEsIHJlZ1QwIH07Ci0jZW5kaWYKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCByZXN1bHQpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IGpzUmVnVDEwKTsKIH0KIAogaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRl
SWZQcm9maWxlZE9wY29kZSguLi4pIHsgfQpAQCAtMzQ5LDEyICszMjIsNyBAQCBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBK
U1ZhbHVlUmVncyB2YQogICAgICAgICByZXR1cm47CiAKICAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0g
bV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0
ZWNvZGUpICsgdmFsdWVQcm9maWxlT2Zmc2V0Rm9yPEJ5dGVjb2RlPihtX2J5dGVjb2RlSW5kZXgu
Y2hlY2twb2ludCgpKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpOwotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgc3RvcmU2NCh2YWx1ZS5ncHIoKSwgQWRkcmVzcyhzX21ldGFk
YXRhR1BSLCBvZmZzZXQpKTsKLSNlbHNlCi0gICAgc3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BSKCks
IEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgb2Zmc2V0ICsgUGF5bG9hZE9mZnNldCkpOwotICAgIHN0
b3JlMzIodmFsdWUudGFnR1BSKCksIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgb2Zmc2V0ICsgVGFn
T2Zmc2V0KSk7Ci0jZW5kaWYKKyAgICBzdG9yZVZhbHVlKHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRh
dGFHUFIsIG9mZnNldCkpOwogfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTM5NSw3OSArMzYz
LDg1IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyIGRzdCkKICAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNz
Rm9yKGRzdCkpOwogfQogCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKK3sKKyAgICBBU1NF
UlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4
IGlzIHNldC4KKyAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAobV9wcm9m
aWxlZENvZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhzcmMpKQor
ICAgICAgICAgICAgbW92ZVZhbHVlKG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNy
YyksIGRzdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFu
dChzcmMsIGRzdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbG9hZFZhbHVlKGFkZHJl
c3NGb3Ioc3JjKSwgZHN0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBKU1ZhbHVlUmVncyBmcm9tKQorewor
ICAgIHN0b3JlVmFsdWUoZnJvbSwgYWRkcmVzc0Zvcihkc3QpKTsKK30KKworI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQp
Cit7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIEpTVmFsdWVSZWdzIHsgdGFnLCBw
YXlsb2FkIH0pOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJl
Z2lzdGVyUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKK3sKKyAg
ICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29k
ZUluZGV4IGlzIHNldC4KKyAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAo
bV9wcm9maWxlZENvZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhz
cmMpKQorICAgICAgICAgICAgbW92ZShJbW0zMihtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25z
dGFudChzcmMpLnBheWxvYWQoKSksIGRzdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxv
YWRDb2RlQmxvY2tDb25zdGFudFBheWxvYWQoc3JjLCBkc3QpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGxvYWQzMihwYXlsb2FkRm9yKHNyYyksIGRzdCk7Cit9CisKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcoVmlydHVhbFJlZ2lzdGVyIHNy
YywgUmVnaXN0ZXJJRCBkc3QpCit7CisgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRo
aXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5l
cmF0aW9uLCBzbyB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCisgICAgaWYgKHNyYy5pc0Nv
bnN0YW50KCkpIHsKKyAgICAgICAgaWYgKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3RhbnRP
d25lZEJ5VW5saW5rZWRDb2RlQmxvY2soc3JjKSkKKyAgICAgICAgICAgIG1vdmUoSW1tMzIobV91
bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKS50YWcoKSksIGRzdCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudFRhZyhzcmMsIGRzdCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbG9hZDMyKHRhZ0ZvcihzcmMpLCBkc3QpOworfQor
I2VsaWYgVVNFKEpTVkFMVUU2NCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpCit7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIEpTVmFsdWVSZWdzIHsgZHN0IH0pOworfQorCitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChWaXJ0
dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKK3sKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywgSlNWYWx1ZVJlZ3MgeyBkc3QgfSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0
ZXJJRCBmcm9tKQoreworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVn
cyB7IGZyb20gfSk7Cit9CisjZW5kaWYKKworCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAogaW5s
aW5lIHZvaWQgSklUOjplbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lz
dGVySUQgdmFsdWUpCiB7CiAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgQVNT
RVJUKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxv
Y2socmVnKSk7CiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wg
PSBtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxv
YWREb3VibGUoVHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBl
bHNlCiAgICAgICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CiB9CiAKLWlu
bGluZSB2b2lkIEpJVDo6ZW1pdExvYWRUYWcoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJ
RCB0YWcpCi17Ci0gICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgbW92ZShJbW0z
MihnZXRDb25zdGFudE9wZXJhbmQocmVnKS50YWcoKSksIHRhZyk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBsb2FkMzIodGFnRm9yKHJlZyksIHRhZyk7Ci19Ci0KLWlubGluZSB2b2lk
IEpJVDo6ZW1pdExvYWRQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5
bG9hZCkKLXsKLSAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBtb3ZlKEltbTMy
KGdldENvbnN0YW50T3BlcmFuZChyZWcpLnBheWxvYWQoKSksIHBheWxvYWQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgbG9hZDMyKHBheWxvYWRGb3IocmVnKSwgcGF5bG9hZCk7Ci19
Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQoY29uc3QgSlNWYWx1ZSYgdiwgUmVnaXN0ZXJJ
RCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCkKLXsKLSAgICBtb3ZlKEltbTMyKHYucGF5bG9hZCgp
KSwgcGF5bG9hZCk7Ci0gICAgbW92ZShJbW0zMih2LnRhZygpKSwgdGFnKTsKLX0KLQotQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIg
c3JjLCBKU1ZhbHVlUmVncyBkc3QpCi17Ci0gICAgZW1pdExvYWQoc3JjLCBkc3QudGFnR1BSKCks
IGRzdC5wYXlsb2FkR1BSKCkpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCi17
Ci0gICAgZW1pdFN0b3JlKGRzdCwgZnJvbS50YWdHUFIoKSwgZnJvbS5wYXlsb2FkR1BSKCkpOwot
fQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lz
dGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSkKLXsKLSAgICBS
RUxFQVNFX0FTU0VSVCh0YWcgIT0gcGF5bG9hZCk7Ci0KLSAgICBpZiAoYmFzZSA9PSBjYWxsRnJh
bWVSZWdpc3RlcikgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChwYXlsb2FkICE9IGJhc2UpOwot
ICAgICAgICBlbWl0TG9hZFBheWxvYWQocmVnLCBwYXlsb2FkKTsKLSAgICAgICAgZW1pdExvYWRU
YWcocmVnLCB0YWcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHBheWxvYWQg
PT0gYmFzZSkgeyAvLyBhdm9pZCBzdG9tcGluZyBiYXNlCi0gICAgICAgIGxvYWQzMih0YWdGb3Io
cmVnLCBiYXNlKSwgdGFnKTsKLSAgICAgICAgbG9hZDMyKHBheWxvYWRGb3IocmVnLCBiYXNlKSwg
cGF5bG9hZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBsb2FkMzIocGF5bG9hZEZv
cihyZWcsIGJhc2UpLCBwYXlsb2FkKTsKLSAgICBsb2FkMzIodGFnRm9yKHJlZywgYmFzZSksIHRh
Zyk7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWQyKFZpcnR1YWxSZWdpc3RlciByZWcx
LCBSZWdpc3RlcklEIHRhZzEsIFJlZ2lzdGVySUQgcGF5bG9hZDEsIFZpcnR1YWxSZWdpc3RlciBy
ZWcyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpCi17Ci0gICAgZW1pdExv
YWQocmVnMiwgdGFnMiwgcGF5bG9hZDIpOwotICAgIGVtaXRMb2FkKHJlZzEsIHRhZzEsIHBheWxv
YWQxKTsKLX0KIAogaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyIHJl
ZywgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQog
ewpAQCAtNDgyLDEzICs0NTYsNiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKFZp
cnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbgogICAgICAgICBz
dG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihyZWcpKTsKIH0K
IAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBU
cnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIpCi17Ci0gICAgc3RvcmUzMihw
YXlsb2FkLCBwYXlsb2FkRm9yKHJlZykpOwotICAgIGlmICghaW5kZXhJc0ludDMyKQotICAgICAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihyZWcpKTsK
LX0KLQogaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcs
IFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCkKIHsKICAgICBzdG9yZTMyKHBh
eWxvYWQsIHBheWxvYWRGb3IocmVnKSk7CkBAIC01MDMsMTEgKzQ3MCw2IEBAIGlubGluZSB2b2lk
IEpJVDo6ZW1pdFN0b3JlQm9vbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxv
YWQsIGJvb2wgaW5kCiAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xl
YW5UYWcpLCB0YWdGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlRG91
YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKLXsKLSAgICBzdG9y
ZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0ZvcihyZWcpKTsKLX0KLQogaW5saW5lIHZvaWQgSklUOjpl
bWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyIHJlZywgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVn
aXN0ZXJJRCBiYXNlKQogewogICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQucGF5bG9hZCgpKSwg
cGF5bG9hZEZvcihyZWcsIGJhc2UpKTsKQEAgLTU1Myw0NCArNTE1LDYgQEAgQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZp
cnR1YWxSZWdpc3QKIAogI2Vsc2UgLy8gVVNFKEpTVkFMVUUzMl82NCkKIAotLy8gZ2V0IGFyZyBw
dXRzIGFuIGFyZyBmcm9tIHRoZSBTRiByZWdpc3RlciBhcnJheSBpbnRvIGEgaC93IHJlZ2lzdGVy
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxS
ZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KQotewotICAgIEFTU0VSVChtX2J5dGVjb2RlSW5k
ZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xk
IHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgotCi0gICAg
aWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgaWYgKG1fcHJvZmlsZWRDb2RlQmxvY2st
PmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxvY2soc3JjKSkgewotICAgICAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0g
ICAgICAgICAgICBtb3ZlKEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIGRzdCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBsb2FkNjQoYWRkcmVzc0ZvcihzcmMpLCBk
c3QpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKLXsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgZHN0LnBheWxvYWRHUFIoKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBS
ZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpCi17
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBkc3QxKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYzIsIGRzdDIpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJv
bSkKLXsKLSAgICBzdG9yZTY0KGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRz
dCwgSlNWYWx1ZVJlZ3MgZnJvbSkKLXsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
ZnJvbS5wYXlsb2FkR1BSKCkpOwotfQotCiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVt
aXRKdW1wSWZCb3RoSlNDZWxscyhSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMiwgUmVn
aXN0ZXJJRCBzY3JhdGNoKQogewogICAgIG1vdmUocmVnMSwgc2NyYXRjaCk7CkBAIC03MjUsMTQg
KzY0OSwzNCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkR2xvYmFsT2JqZWN0KEdQUlJl
ZyByZXN1bHQpCiAgICAgbG9hZENvbnN0YW50KG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQsIHJlc3Vs
dCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudChW
aXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQsIEdQUlJlZyByZXN1bHQpCitBTFdBWVNfSU5MSU5FIHN0
YXRpYyB2b2lkIGxvYWRBZGRyT2ZDb2RlQmxvY2tDb25zdGFudEJ1ZmZlcihKSVQgJmppdCwgR1BS
UmVnIGRzdCkKK3sKKyAgICBqaXQubG9hZFB0cihqaXQuYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCBkc3QpOworICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhkc3QsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZDb25zdGFudHNWZWN0b3JCdWZmZXIoKSksIGRzdCk7Cit9CisKK0FM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0
ZXIgY29uc3RhbnQsIEpTVmFsdWVSZWdzIGRzdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChjb25z
dGFudC5pc0NvbnN0YW50KCkpOwotICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZXN1bHQpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIENvZGVC
bG9jazo6b2Zmc2V0T2ZDb25zdGFudHNWZWN0b3JCdWZmZXIoKSksIHJlc3VsdCk7Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlc3VsdCwgY29uc3RhbnQudG9Db25zdGFudEluZGV4KCkgKiBzaXplb2Yo
dm9pZCopKSwgcmVzdWx0KTsKKyAgICBsb2FkQWRkck9mQ29kZUJsb2NrQ29uc3RhbnRCdWZmZXIo
KnRoaXMsIGRzdC5wYXlsb2FkR1BSKCkpOworICAgIGxvYWRWYWx1ZShBZGRyZXNzKGRzdC5wYXls
b2FkR1BSKCksIGNvbnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICogc2l6ZW9mKFJlZ2lzdGVyKSks
IGRzdCk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6bG9hZENvZGVCbG9ja0NvbnN0YW50UGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQs
IFJlZ2lzdGVySUQgZHN0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50LmlzQ29uc3Rh
bnQoKSk7CisgICAgbG9hZEFkZHJPZkNvZGVCbG9ja0NvbnN0YW50QnVmZmVyKCp0aGlzLCBkc3Qp
OworICAgIGxvYWQzMihBZGRyZXNzKGRzdCwgY29uc3RhbnQudG9Db25zdGFudEluZGV4KCkgKiBz
aXplb2YoUmVnaXN0ZXIpICsgUGF5bG9hZE9mZnNldCksIGRzdCk7Cit9CitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjpsb2FkQ29kZUJsb2NrQ29uc3RhbnRUYWcoVmlydHVhbFJlZ2lzdGVyIGNvbnN0
YW50LCBSZWdpc3RlcklEIGRzdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0Nv
bnN0YW50KCkpOworICAgIGxvYWRBZGRyT2ZDb2RlQmxvY2tDb25zdGFudEJ1ZmZlcigqdGhpcywg
ZHN0KTsKKyAgICBsb2FkMzIoQWRkcmVzcyhkc3QsIGNvbnN0YW50LnRvQ29uc3RhbnRJbmRleCgp
ICogc2l6ZW9mKFJlZ2lzdGVyKSArIFRhZ09mZnNldCksIGRzdCk7Cit9CisjZW5kaWYKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXggZjg0NDU4NzgwM2MyNjE4YzY4MDM5ODM2Y2Vl
NmM3YjM0ZmQyYzMwNC4uYzMyNDBiOGZmNGI4ZTFjMGVhYTEzMmIwZThiMzg4NjEyZTZjYTZiZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC00NSw4ICs0NSw2
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLQogdm9pZCBKSVQ6
OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCk7CkBAIC01
NSwyNiArNTMsMjMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAg
ICBpZiAobV9wcm9maWxlZENvZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVC
bG9jayhzcmMpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVC
bG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAgICAgICAgIHN0b3JlNjQoSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgICAgICBzdG9yZVZh
bHVlKG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyksIGFkZHJlc3NGb3IoZHN0
KSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQo
c3JjLCByZWdUMCk7Ci0gICAgICAgICAgICBzdG9yZTY0KHJlZ1QwLCBhZGRyZXNzRm9yKGRzdCkp
OworICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywganNSZWdUMTApOworICAg
ICAgICAgICAgc3RvcmVWYWx1ZShqc1JlZ1QxMCwgYWRkcmVzc0Zvcihkc3QpKTsKICAgICAgICAg
fQotCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBsb2FkNjQoYWRkcmVzc0ZvcihzcmMp
LCByZWdUMCk7Ci0gICAgc3RvcmU2NChyZWdUMCwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICBsb2Fk
VmFsdWUoYWRkcmVzc0ZvcihzcmMpLCBqc1JlZ1QxMCk7CisgICAgc3RvcmVWYWx1ZShqc1JlZ1Qx
MCwgYWRkcmVzc0Zvcihkc3QpKTsKIH0KIAotCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbmQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEVuZD4oKTsKLSAgICBSRUxFQVNFX0FTU0VSVChyZXR1
cm5WYWx1ZUdQUiAhPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgc3RhdGljX2Fzc2Vy
dCghcmV0dXJuVmFsdWVKU1IudXNlcyhjYWxsRnJhbWVSZWdpc3RlcikpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVKU1IpOwogICAgIGVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAg
IHJldCgpOwpAQCAtODcsNiArODIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0
KTsKIH0KIAorCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CkBAIC0xMDUsNyArMTAxLDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFj
aXR5T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3Jh
Z2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIGJveENlbGwocmVz
dWx0UmVnLCBqc1JlZ1QxMCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2RzdCwganNSZWdUMTApOwogCiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIH0KQEAgLTEx
OSw5ICsxMTYsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlUmVnKTsKLSAgICBlbWl0
U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworICAgIGJveENlbGwocmV0dXJuVmFsdWVH
UFIsIHJldHVyblZhbHVlSlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0
dXJuVmFsdWVKU1IpOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKwogdm9pZCBKSVQ6OmVtaXRf
b3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
T3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCk7CkBAIC0yMTAsMTIgKzIxMCw2IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBD
YWxsKCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJ
bnN0cnVjdGlvbiopCi17Ci0gICAgLy8gVGhpcyBhbHdheXMgZ29lcyB0byBzbG93IHBhdGggc2lu
Y2Ugd2UgZXhwZWN0IGl0IHRvIGJlIHJhcmUuCi0gICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLX0K
LSAgICAKIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJc0VtcHR5PigpOwpAQCAtMjI5LDMzICsyMjMsMzkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKKyNlbmRpZgorCiB2b2lkIEpJVDo6ZW1p
dF9vcF90eXBlb2ZfaXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BU
eXBlb2ZJc1VuZGVmaW5lZD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwog
ICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1w
IGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwganNSZWdUMTApOworICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKGpzUmVn
VDEwKTsKIAotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGNvbXBh
cmU2NChFcXVhbCwganNSZWdUMTAucGF5bG9hZEdQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGNv
bXBhcmUzMihFcXVhbCwganNSZWdUMTAudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCByZWdUMCk7CisjZW5kaWYKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAg
ICAgCiAgICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7
CisgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJv
LCBBZGRyZXNzKGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIG1vdmUo
VHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CiAgICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0ganVtcCgpOwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7
Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAg
ZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwganNSZWdUMTAucGF5bG9hZEdQUigpLCByZWdUMSwgcmVn
VDIpOwogICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKICAgICBjb21w
YXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKIAogICAgIG5vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgYm94Qm9vbGVhbihyZWdUMCwganNSZWdUMTApOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0yNjQsMTUgKzI2NCwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRf
b3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwganNSZWdUMTAp
OwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdU
MCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZh
bHVlTnVsbCksIHJlZ1QwKTsKKyAgICBlbWl0VHVyblVuZGVmaW5lZEludG9OdWxsKGpzUmVnVDEw
KTsKKyAgICBpc051bGwoanNSZWdUMTAsIHJlZ1QwKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKwogdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNC
b29sZWFuPigpOwpAQCAtNDE4LDE1ICs0MjAsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJv
cGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAorI2VuZGlmCisKIHZvaWQgSklUOjpl
bWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BT
ZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Z1bmN0aW9uLCBhcmd1bWVudEdQUjEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9uYW1lLCBhcmd1bWVudEdQUjIpOwotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1l
bnRHUFIwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7CisKKyAgICB1c2luZyBTbG93
T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lKTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dP
cGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEdQUlJlZyBmdW5jdGlvbkdQUiA9IHByZWZl
cnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7CisgICAgY29uc3RleHByIEpTVmFs
dWVSZWdzIG5hbWVKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAyPigp
OworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUubV9mdW5jdGlv
biwgZnVuY3Rpb25HUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9u
YW1lLCBuYW1lSlNSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGdsb2JhbE9iamVjdEdQ
UiwgZnVuY3Rpb25HUFIsIG5hbWVKU1IpOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKwogdm9p
ZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7
CkBAIC00NDIsMjEgKzQ1NCwyNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0KTsKIH0KIAorI2VuZGlmCisKIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNlPigpOwogICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExh
YmVsKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICBjb25zdGV4
cHIgSlNWYWx1ZVJlZ3MgdmFsdWUgPSBqc1JlZ1QxMDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24sIHZhbHVlKTsKICNpZiAhRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCi0gICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGds
b2JhbE9iamVjdEdQUiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSBy
ZWdUMjsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7CisgICAgY29uc3Rl
eHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKKyAgICBzdGF0aWNfYXNzZXJ0KG5v
T3ZlcmxhcCh2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBnbG9iYWxPYmplY3RHUFIpKTsKICAg
ICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVl
OwogICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICBhZGRKdW1wKGJy
YW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gy
LCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGds
b2JhbE9iamVjdEdQUiksIHRhcmdldCk7CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgp
LCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxz
ZQogICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzRmFsc2V5R2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTQ3Myw2ICs0ODgsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6dmFsdWVJc0ZhbHNleUdlbmVyYXRv
cihWTSYgdm0pCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcg
dmFsdWUgPSByZWdUMDsKKyAgICBzdGF0aWNfYXNzZXJ0KHZhbHVlID09IGpzUmVnVDEwLnBheWxv
YWRHUFIoKSk7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIGNv
bnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwpAQCAtNTAzLDQ4ICs1MTksNTEg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsK
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywg
cmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBqc1JlZ1QxMCk7CisgICAgSnVtcCBpc0lt
bWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChqc1JlZ1QxMCk7CiAKICAgICAvLyBGaXJzdCwgaGFu
ZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRo
ZSBzdHJ1Y3R1cmUuCi0gICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFu
Y2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgSnVtcCBpc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGpzUmVnVDEwLnBh
eWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGpz
UmVnVDEwLnBheWxvYWRHUFIoKSwgcmVnVDIsIHJlZ1QxKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1w
IG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwogCiAgICAgLy8gTm93
IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAogICAgIGlzSW1t
ZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAg
ICAgCisgICAgZW1pdFR1cm5VbmRlZmluZWRJbnRvTnVsbChqc1JlZ1QxMCk7CisgICAgYWRkSnVt
cChicmFuY2hJZk51bGwoanNSZWdUMTApLCB0YXJnZXQpOwogCiAgICAgaXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0Zv
cmVpZ24ubGluayh0aGlzKTsKLX07Cit9CisKIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51bGw+KCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRp
YXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYywganNSZWdUMTApOworICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwo
anNSZWdUMTApOwogCiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAgIGFkZEp1bXAo
YnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwot
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgIGFk
ZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEpT
Q2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBqc1JlZ1Qx
MC5wYXlsb2FkR1BSKCksIHJlZ1QyLCByZWdUMSk7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
MCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCB3
YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlh
dGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCiAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsK
LSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsK
LSAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICBlbWl0VHVy
blVuZGVmaW5lZEludG9OdWxsKGpzUmVnVDEwKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmTm90TnVs
bChqc1JlZ1QxMCksIHRhcmdldCk7CiAKICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsK
IH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCisKIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRf
b3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnVuZGVmaW5lZE9yTnVsbD4o
KTsKQEAgLTU3Niw3ICs1OTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfcHRyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBsb2FkQ29kZUJsb2Nr
Q29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDEpOworICAgIGxvYWRDb2Rl
QmxvY2tDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCBKU1ZhbHVlUmVncyB7IHJl
Z1QxIH0pOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJn
ZXQpOwogfQogCkBAIC01ODcsNyArNjA2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJl
bCk7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBs
b2FkQ29kZUJsb2NrQ29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDEpOwor
ICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCBKU1Zh
bHVlUmVncyB7IHJlZ1QxIH0pOwogICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5j
aFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxKTsKICAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJ
bW0zMigxKSwgYnl0ZWNvZGUsIE9wSm5lcVB0cjo6TWV0YWRhdGE6Om9mZnNldE9mSGFzSnVtcGVk
KCkpOwogICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwpAQCAtNTk3LDcgKzYxNiw4IEBAIHZv
aWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJl
Z1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9saHMsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fcmhzLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCBy
ZWdUMSwgcmVnVDIpOwogICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7
CiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKQEAgLTYwOCwy
NiArNjI4LDMwIEBAIHZvaWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2xocywgcmVnVDApOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgYWRkSnVtcChi
cmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKIH0KIAorI2VuZGlmCisKIHZv
aWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1
ZT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVl
ID0gcmVnVDA7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHZhbHVlID0ganNSZWdUMTA7CiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDEgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0g
ICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNo
MiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7
CisgICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAodmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwg
Z2xvYmFsT2JqZWN0R1BSKSk7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVj
dEdQUik7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1
ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOworICAgIGFkZEp1
bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdU
MCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmpl
Y3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENU
SVN0dWIodmFsdWVJc1RydXRoeUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsK
ICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC02
NDQsNiArNjY4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6
OnZhbHVlSXNUcnV0aHlHZW5lcmF0b3IoVk0mIHZtKQogICAgIENDYWxsSGVscGVycyBqaXQ7CiAK
ICAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgc3RhdGljX2Fzc2VydCh2
YWx1ZSA9PSBqc1JlZ1QxMC5wYXlsb2FkR1BSKCkpOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2Ny
YXRjaDEgPSByZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CiAg
ICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1
ZTsKQEAgLTY2OCwxMCArNjkzLDEzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gSklUOjp2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJiB2bSkKIH0KICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisKIHZvaWQgSklU
OjplbWl0X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUu
bV9yaHMsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbGhz
LCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3JocywgcmVn
VDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsK
ICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwogICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CkBAIC02ODMsMjEgKzcxMSwyNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
bmVxPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2xocywgcmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgYWRkSnVtcChicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKIH0KIAorI2VuZGlmCisKIHZvaWQgSklU
OjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUaHJvdz4oKTsK
LSAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOworICAgIHN0YXRpY19hc3NlcnQo
cmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCku
dG9wRW50cnlGcmFtZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Zh
bHVlLCByZWdUMCk7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7Ci0gICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIHJlZ1QxLCByZWdUMCk7CisgICAg
dXNpbmcgU2xvd09wZXJhdGlvbiA9IGRlY2x0eXBlKG9wZXJhdGlvblRocm93KTsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dP
cGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHZhbHVlSlNSID0gcHJl
ZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlSlNSKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uVGhyb3csIGdsb2JhbE9iamVjdEdQUiwgdmFsdWVKU1IpOwogICAgIGp1bXBUb0V4
Y2VwdGlvbkhhbmRsZXIodm0oKSk7CiAjZWxzZQogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNv
ZGVPZmZzZXRHUFIgPSBhcmd1bWVudEdQUjI7CkBAIC03NDAsNiArNzc0LDggQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Om9wX3Rocm93X2hhbmRsZXJHZW5lcmF0
b3IoVk0mIHZtKQogfQogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCisjaWYg
VVNFKEpTVkFMVUU2NCkKKwogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6Y29tcGls
ZU9wU3RyaWN0RXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKQEAg
LTc0OCw3ICs3ODQsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5
dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjMiwgcmVnVDEpOwogCiAjaWYgVVNFKEJJR0lOVDMyKQogICAgIC8q
IEF0IGEgaGlnaCBsZXZlbCB3ZSBkbyAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToK
QEAgLTgzMyw3ICs4NzAsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YzEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2Rl
Lm1fcmhzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIs
IHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIHJlZ1QxKTsKIAogI2lmIFVTRShCSUdJTlQzMikK
ICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJp
Y3RFcSk6CkBAIC0xMDQ4LDYgKzEwODYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFN0
b3JlQ2VsbChieXRlY29kZS5tX2RzdCwgcmVnVDApOwogfQogCisjZW5kaWYKKwogdm9pZCBKSVQ6
OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNo
SW1tPigpOwpAQCAtMTA2MSwxNiArMTEwMSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hf
aW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgbV9zd2l0Y2hl
cy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVs
dE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1
cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NydXRpbmVlLCByZWdUMCk7Ci0gICAgYXV0byBub3RJbnQzMiA9IGJyYW5jaElmTm90SW50MzIo
cmVnVDApOwotICAgIHN1YjMyKEltbTMyKHVubGlua2VkVGFibGUubV9taW4pLCByZWdUMCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIGpzUmVnVDEwKTsKKyAgICBhdXRv
IG5vdEludDMyID0gYnJhbmNoSWZOb3RJbnQzMihqc1JlZ1QxMCk7CisgICAgc3ViMzIoSW1tMzIo
dW5saW5rZWRUYWJsZS5tX21pbiksIGpzUmVnVDEwLnBheWxvYWRHUFIoKSk7CiAKLSAgICBhZGRK
dW1wKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDAsIEltbTMyKGxpbmtlZFRhYmxlLm1fY3Rp
T2Zmc2V0cy5zaXplKCkpKSwgZGVmYXVsdE9mZnNldCk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5kYXRhKCkpLCByZWdUMSk7Ci0gICAgZmFySnVtcChC
YXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBTY2FsZVB0ciksIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBh
ZGRKdW1wKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwganNSZWdUMTAucGF5bG9hZEdQUigpLCBJbW0z
MihsaW5rZWRUYWJsZS5tX2N0aU9mZnNldHMuc2l6ZSgpKSksIGRlZmF1bHRPZmZzZXQpOworICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihsaW5rZWRUYWJsZS5tX2N0aU9mZnNldHMuZGF0YSgpKSwgcmVn
VDIpOworICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QyLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCks
IFNjYWxlUHRyKSwgcmVnVDIpOworICAgIGZhckp1bXAocmVnVDIsIEpTU3dpdGNoUHRyVGFnKTsK
IAogICAgIG5vdEludDMyLmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCAmdm0oKSwgcmVnVDAs
IHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOworICAgIGNhbGxPcGVyYXRpb25Ob0V4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgJnZtKCks
IGpzUmVnVDEwLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJKdW1w
KHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKQEAgLTEwODksOSArMTEzMCwx
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJs
ZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hh
cmFjdGVyKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1lbnRHUFIxKTsK
LSAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFyZ3Vt
ZW50R1BSMSwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7CisgICAgdXNpbmcgU2xv
d09wZXJhdGlvbiA9IGRlY2x0eXBlKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5
cGUpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJn
dW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3Mg
c2NydXRpbmVlSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMT4oKTsK
KworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBzY3J1dGluZWVKU1IpOwor
ICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIGdsb2JhbE9iamVjdEdQUiwg
c2NydXRpbmVlSlNSLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJK
dW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKQEAgLTExMDgsOSArMTE1
MywxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3Jk
KHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3Jk
OjpTdHJpbmcpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxl
KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEp
OwotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgYXJndW1lbnRHUFIwLCBh
cmd1bWVudEdQUjEsIHRhYmxlSW5kZXgpOworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNs
dHlwZShvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUpOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09w
ZXJhdGlvbiwgMD4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3Mgc2NydXRpbmVlSlNSID0g
cHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMT4oKTsKKworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBzY3J1dGluZWVKU1IpOworICAgIGxvYWRHbG9iYWxP
YmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRj
aFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgZ2xvYmFsT2JqZWN0R1BSLCBzY3J1dGluZWVKU1Is
IHRhYmxlSW5kZXgpOwogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFn
KTsKIH0KIApAQCAtMTEyMCwxNSArMTE2OSwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdU
MCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBqc1JlZ1QxMCk7CisgICAgSnVtcCBpc0ltbWVk
aWF0ZSA9IGJyYW5jaElmTm90Q2VsbChqc1JlZ1QxMCk7CiAKLSAgICBKdW1wIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKTsKKyAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4
KE5vblplcm8sIEFkZHJlc3MoanNSZWdUMTAucGF5bG9hZEdQUigpLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAg
ICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJl
Z1QxKTsKKyAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCks
IHJlZ1QyLCByZWdUMSk7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIp
OwogICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwpAQCAtMTEzNiwx
NCArMTE4NSwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwogCi0g
ICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0g
ICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVs
bCksIHJlZ1QwKTsKKyAgICBlbWl0VHVyblVuZGVmaW5lZEludG9OdWxsKGpzUmVnVDEwKTsKKyAg
ICBpc051bGwoanNSZWdUMTAsIHJlZ1QwKTsKIAogICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRo
aXMpOwogICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKIAotICAg
IGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTE1MiwxNSArMTIwMSwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAg
IEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjMSwganNSZWdUMTApOworICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBi
cmFuY2hJZk5vdENlbGwoanNSZWdUMTApOwogCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7
CisgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJv
LCBBZGRyZXNzKGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIG1vdmUo
VHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0ganVtcCgpOwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Cisg
ICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwganNSZWdUMTAucGF5bG9hZEdQUigpLCByZWdUMiwg
cmVnVDEpOwogICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBj
b21wYXJlUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKQEAgLTExNjgsMTYgKzEy
MTcsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CiAKLSAgICBh
bmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBj
b21wYXJlNjQoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxs
KSwgcmVnVDApOworICAgIGVtaXRUdXJuVW5kZWZpbmVkSW50b051bGwoanNSZWdUMTApOworICAg
IGlzTm90TnVsbChqc1JlZ1QxMCwgcmVnVDApOwogCiAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmso
dGhpcyk7CiAgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogCi0g
ICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYm94Qm9vbGVhbihyZWdUMCwganNSZWdUMTApOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBqc1JlZ1QxMCk7CiB9CiAKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiop
CiB7CiAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxp
emUgb3VyIGNvbnN0YW50CkBAIC0xMzA0LDE2ICsxMzU1LDE4IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVt
aXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CiB9CiAKKyNlbmRpZgorCiB2b2lkIEpJVDo6ZW1pdF9v
cF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIGpzUmVnVDEwKTsKIAotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7CisgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGpzUmVnVDEwKTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlw
ZShyZWdUMSwgRmluYWxPYmplY3RUeXBlKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RU
eXBlKGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgRmluYWxPYmplY3RUeXBlKSk7CiAgICAgbG9hZDMy
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFRvVGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVk
U3RydWN0dXJlSUQoKSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOwor
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKGpzUmVnVDEwLnBheWxv
YWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKQEAgLTEzMjgsNyArMTM4MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90
aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgUmVnaXN0ZXJJ
RCBjYWNoZWRGdW5jdGlvblJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9
IHJlZ1QzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoY2FsbGVlLCBjYWxsZWVSZWcpOwog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVlUmVnKSk7CiAgICAgbG9h
ZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JS
YXJlRGF0YSgpKSwgcmFyZURhdGFSZWcpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIo
WmVybywgcmFyZURhdGFSZWcsIFRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykp
KTsKQEAgLTEzNDcsOSArMTQwMCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRJbml0aWFsaXpl
SW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIG11dGF0b3JGZW5jZSgq
bV92bSk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICBib3hDZWxsKHJlc3VsdFJlZywganNSZWdUMTAp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIGpzUmVnVDEwKTsK
IH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCisKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tUZHo+KCk7CkBAIC0xNDA1LDYgKzE0
NjEsMTQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXMKICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCisjZW5kaWYg
Ly8gVVNFKEpTVkFMVUU2NCkKKwordm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20o
Y29uc3QgSW5zdHJ1Y3Rpb24qKQoreworICAgIC8vIFRoaXMgYWx3YXlzIGdvZXMgdG8gc2xvdyBw
YXRoIHNpbmNlIHdlIGV4cGVjdCBpdCB0byBiZSByYXJlLgorICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSk7Cit9CisKIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CkBAIC0xNDE1LDE2
ICsxNDc5LDIyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWCiAgICAgVmlydHVhbFJlZ2lzdGVy
IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgR1BSSW5mbzo6YXJndW1lbnRH
UFIyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMyk7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChHUFJJbmZvOjphcmd1bWVu
dEdQUjApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZh
bHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19CisgICAgdXNpbmcgU2xvd09wZXJh
dGlvbiA9IGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20pOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJh
dGlvbiwgMD4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgdmFsdWVKU1IgPSBwcmVmZXJy
ZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAxPigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcg
Y29uc3RydWN0b3JHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAyPigp
OworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBoYXNJbnN0YW5jZVZhbHVlSlNSID0gcHJlZmVy
cmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMz4oKTsKIAotI2VuZGlmIC8vIFVTRShKU1ZB
TFVFNjQpCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVKU1IpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvckdQ
Uik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBoYXNJbnN0
YW5jZVZhbHVlSlNSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7Cisg
ICAgY2FsbE9wZXJhdGlvbigKKyAgICAgICAgb3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwKKyAg
ICAgICAgZ2xvYmFsT2JqZWN0R1BSLCB2YWx1ZUpTUiwgY29uc3RydWN0b3JHUFIsIGhhc0luc3Rh
bmNlVmFsdWVKU1IpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIHJldHVyblZhbHVl
SlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVKU1IpOwor
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewpAQCAtMTQ0MywxNCArMTUxMyw5IEBAIHZvaWQgSklUOjplbWl0X29wX2xv
b3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiAgICAgICAgIGxvYWRQdHIo
cHRyLCByZWdUMCk7CiAgICAgICAgIGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoUHRyKEJl
bG93LCByZWdUMCwgVHJ1c3RlZEltbVB0cihPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0
ZUxvb3BzTGltaXQoKSkpOwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGxvYWRHbG9i
YWxPYmplY3QocmVzdWx0UmVncy5ncHIoKSk7Ci0jZWxzZQotICAgICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOwotICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsK
LSAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlc3VsdFJlZ3Mu
dGFnR1BSKCkpOwotI2VuZGlmCisgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmV0dXJuVmFsdWVK
U1IucGF5bG9hZEdQUigpKTsKKyAgICAgICAgYm94Q2VsbChyZXR1cm5WYWx1ZUpTUi5wYXlsb2Fk
R1BSKCksIHJldHVyblZhbHVlSlNSKTsKKwogICAgICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdu
bWVudCgpOwogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgIGVtaXRG
dW5jdGlvbkVwaWxvZ3VlKCk7CkBAIC0xNTg4LDExICsxNjUzLDcgQEAgdm9pZCBKSVQ6OmVtaXRO
ZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7
Ci0jZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQ
UjEpOwotI2VuZGlmCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUu
bV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICAgICBhdXRvIGNvbnN0YW50ID0gYWRkVG9Db25zdGFu
dFBvb2woSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkRlY2wsIGJpdHdpc2VfY2FzdDx2
b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsK
ICAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQsIGFyZ3VtZW50R1BSMik7CiAKQEAgLTE2MzQsMTIg
KzE2OTUsOCBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwotI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxv
YWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKLSNlbmRpZgogCisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsK
ICAgICBhdXRvIGNvbnN0YW50ID0gYWRkVG9Db25zdGFudFBvb2woSklUQ29uc3RhbnRQb29sOjpU
eXBlOjpGdW5jdGlvbkV4cHIsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0
cl90PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKICAgICBsb2FkQ29uc3RhbnQoY29uc3Rh
bnQsIGFyZ3VtZW50R1BSMik7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7
CkBAIC0xNjkzLDIwICsxNzUwLDE3IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRo
X3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBzaXplSW5kZXggPSBieXRlY29kZS5tX2xlbmd0aDsKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheVdp
dGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIGFyZ3Vt
ZW50R1BSMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFyZ3VtZW50
R1BSMik7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgYXJndW1lbnRH
UFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BSMik7Ci0jZWxzZQotICAgIG1hdGVyaWFsaXpl
UG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIHJlZ1QyKTsKLSAgICBlbWl0TG9h
ZChzaXplSW5kZXgsIHJlZ1QxLCByZWdUMCk7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwg
ZHN0LCByZWdUMywgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwotI2VuZGlmCi19
CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHVzaW5nIE9wZXJhdGlvbiA9IGRlY2x0eXBlKG9w
ZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlKTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPE9wZXJhdGlvbiwgMD4oKTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHByb2ZpbGVHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxP
cGVyYXRpb24sIDE+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHNpemVKU1IgPSBwcmVm
ZXJyZWRBcmd1bWVudEpTUjxPcGVyYXRpb24sIDI+KCk7CisKKyAgICBtYXRlcmlhbGl6ZVBvaW50
ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9m
ZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgc2l6ZUpTUik7CisgICAgbG9hZEdsb2JhbE9iamVj
dChnbG9iYWxPYmplY3RHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlX
aXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgZ2xvYmFsT2JqZWN0R1BSLCBwcm9maWxlR1BSLCBzaXpl
SlNSKTsKK30KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CkBAIC0xNzE3LDU2ICsxNzcxLDU2IEBAIHZvaWQg
SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEu
bV90eXBlTG9jYXRpb247CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0
ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZVRvUHJvZmlsZSwganNSZWdUMTApOwogCiAgICAgSnVtcExpc3QganVtcFRvRW5kOwogCi0g
ICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAganVtcFRvRW5k
LmFwcGVuZChicmFuY2hJZkVtcHR5KGpzUmVnVDEwKSk7CiAKICAgICAvLyBDb21waWxlIGluIGEg
cHJlZGljdGl2ZSB0eXBlIGNoZWNrLCBpZiBwb3NzaWJsZSwgdG8gc2VlIGlmIHdlIGNhbiBza2lw
IHdyaXRpbmcgdG8gdGhlIGxvZy4KICAgICAvLyBUaGVzZSB0eXBlY2hlY2tzIGFyZSBpbmxpbmVk
IHRvIG1hdGNoIHRob3NlIG9mIHRoZSA2NC1iaXQgSlNWYWx1ZSB0eXBlIGNoZWNrcy4KICAgICBp
ZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlVW5kZWZpbmVkKQot
ICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmVW5kZWZpbmVkKHJlZ1QwKSk7CisgICAg
ICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZVbmRlZmluZWQoanNSZWdUMTApKTsKICAgICBl
bHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVOdWxsKQot
ICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmTnVsbChyZWdUMCkpOworICAgICAgICBq
dW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmTnVsbChqc1JlZ1QxMCkpOwogICAgIGVsc2UgaWYgKGNh
Y2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZUJvb2xlYW4pCi0gICAgICAg
IGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZCb29sZWFuKHJlZ1QwLCByZWdUMSkpOworICAgICAg
ICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmQm9vbGVhbihqc1JlZ1QxMCwgcmVnVDIpKTsKICAg
ICBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVBbnlJ
bnQpCi0gICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZJbnQzMihyZWdUMCkpOworICAg
ICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmSW50MzIoanNSZWdUMTApKTsKICAgICBlbHNl
IGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVOdW1iZXIpCi0g
ICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKKyAgICAgICAg
anVtcFRvRW5kLmFwcGVuZChicmFuY2hJZk51bWJlcihqc1JlZ1QxMCwgcmVnVDIpKTsKICAgICBl
bHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVTdHJpbmcp
IHsKLSAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAg
ICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmU3RyaW5nKHJlZ1QwKSk7CisgICAgICAgIEp1
bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKGpzUmVnVDEwKTsKKyAgICAgICAganVtcFRv
RW5kLmFwcGVuZChicmFuY2hJZlN0cmluZyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCkpKTsKICAgICAg
ICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CiAgICAgfQogCiAgICAgLy8gTG9hZCB0aGUgdHlwZSBw
cm9maWxpbmcgbG9nIGludG8gVDIuCiAgICAgVHlwZVByb2ZpbGVyTG9nKiBjYWNoZWRUeXBlUHJv
ZmlsZXJMb2cgPSBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoY2FjaGVkVHlwZVByb2ZpbGVyTG9nKSwgcmVnVDIpOwotICAgIC8vIExvYWQgdGhlIG5leHQg
bG9nIGVudHJ5IGludG8gVDEuCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBUeXBlUHJvZmls
ZXJMb2c6OmN1cnJlbnRMb2dFbnRyeU9mZnNldCgpKSwgcmVnVDEpOworICAgIC8vIExvYWQgdGhl
IG5leHQgbG9nIGVudHJ5IGludG8gVDMuCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBUeXBl
UHJvZmlsZXJMb2c6OmN1cnJlbnRMb2dFbnRyeU9mZnNldCgpKSwgcmVnVDMpOwogCiAgICAgLy8g
U3RvcmUgdGhlIEpTVmFsdWUgb250byB0aGUgbG9nIGVudHJ5LgotICAgIHN0b3JlNjQocmVnVDAs
IEFkZHJlc3MocmVnVDEsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnZhbHVlT2Zmc2V0KCkp
KTsKKyAgICBzdG9yZVZhbHVlKGpzUmVnVDEwLCBBZGRyZXNzKHJlZ1QzLCBUeXBlUHJvZmlsZXJM
b2c6OkxvZ0VudHJ5Ojp2YWx1ZU9mZnNldCgpKSk7CiAKLSAgICAvLyBTdG9yZSB0aGUgc3RydWN0
dXJlSUQgb2YgdGhlIGNlbGwgaWYgVDAgaXMgYSBjZWxsLCBvdGhlcndpc2UsIHN0b3JlIDAgb24g
dGhlIGxvZyBlbnRyeS4KLSAgICBKdW1wIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZWdUMCk7Ci0gICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhyZWdUMSwgVHlwZVByb2ZpbGVy
TG9nOjpMb2dFbnRyeTo6c3RydWN0dXJlSURPZmZzZXQoKSkpOworICAgIC8vIFN0b3JlIHRoZSBz
dHJ1Y3R1cmVJRCBvZiB0aGUgY2VsbCBpZiBqc1JlZ1QxMCBpcyBhIGNlbGwsIG90aGVyd2lzZSwg
c3RvcmUgMCBvbiB0aGUgbG9nIGVudHJ5LgorICAgIEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChqc1JlZ1QxMCk7CisgICAgbG9hZDMyKEFkZHJlc3MoanNSZWdUMTAucGF5bG9hZEdQUigp
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CisgICAgc3RvcmUzMihyZWdU
MCwgQWRkcmVzcyhyZWdUMywgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6c3RydWN0dXJlSURP
ZmZzZXQoKSkpOwogICAgIEp1bXAgc2tpcElzQ2VsbCA9IGp1bXAoKTsKICAgICBub3RDZWxsLmxp
bmsodGhpcyk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MocmVnVDEsIFR5
cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAgICBzdG9y
ZTMyKFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhyZWdUMywgVHlwZVByb2ZpbGVyTG9nOjpMb2dF
bnRyeTo6c3RydWN0dXJlSURPZmZzZXQoKSkpOwogICAgIHNraXBJc0NlbGwubGluayh0aGlzKTsK
IAogICAgIC8vIFN0b3JlIHRoZSB0eXBlTG9jYXRpb24gb24gdGhlIGxvZyBlbnRyeS4KICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoY2FjaGVkVHlwZUxvY2F0aW9uKSwgcmVnVDApOwotICAgIHN0b3Jl
NjQocmVnVDAsIEFkZHJlc3MocmVnVDEsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OmxvY2F0
aW9uT2Zmc2V0KCkpKTsKKyAgICBzdG9yZVB0cihyZWdUMCwgQWRkcmVzcyhyZWdUMywgVHlwZVBy
b2ZpbGVyTG9nOjpMb2dFbnRyeTo6bG9jYXRpb25PZmZzZXQoKSkpOwogCiAgICAgLy8gSW5jcmVt
ZW50IHRoZSBjdXJyZW50IGxvZyBlbnRyeS4KLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVv
ZihUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5KSksIHJlZ1QxKTsKLSAgICBzdG9yZTY0KHJlZ1Qx
LCBBZGRyZXNzKHJlZ1QyLCBUeXBlUHJvZmlsZXJMb2c6OmN1cnJlbnRMb2dFbnRyeU9mZnNldCgp
KSk7Ci0gICAgSnVtcCBza2lwQ2xlYXJMb2cgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QxLCBU
cnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVQcm9maWxlckxvZy0+bG9nRW5kUHRyKCkpKTsKKyAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5KSksIHJl
Z1QzKTsKKyAgICBzdG9yZVB0cihyZWdUMywgQWRkcmVzcyhyZWdUMiwgVHlwZVByb2ZpbGVyTG9n
OjpjdXJyZW50TG9nRW50cnlPZmZzZXQoKSkpOworICAgIEp1bXAgc2tpcENsZWFyTG9nID0gYnJh
bmNoUHRyKE5vdEVxdWFsLCByZWdUMywgVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlUHJvZmlsZXJM
b2ctPmxvZ0VuZFB0cigpKSk7CiAgICAgLy8gQ2xlYXIgdGhlIGxvZyBpZiB3ZSdyZSBhdCB0aGUg
ZW5kIG9mIHRoZSBsb2cuCiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uUHJvY2Vzc1R5cGVQcm9maWxlckxvZywgJnZtKCkpOwogICAgIHNraXBDbGVhckxvZy5saW5r
KHRoaXMpOwpAQCAtMTc3OCwxMyArMTgzMiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hh
ZG93X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdAog
ewogICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKICAgICB1cGRhdGVU
b3BDYWxsRnJhbWUoKTsKLSAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYg
bm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRy
dWUuIik7CisgICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAocmVnVDAsIG5vbkFyZ0dQUjAsIHJl
Z1QyKSwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuUHJv
bG9ndWU+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1QwOwogICAgIEdQUlJl
ZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVu
dCByZWdpc3Rlci4KICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKICAgICBlbnN1cmVT
aGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNj
cmF0Y2gyUmVnKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUs
IHJlZ1QzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChieXRlY29kZS5tX3Nj
b3BlLCByZWdUMyk7CiAgICAgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KHNoYWRvd1Bh
Y2tldFJlZywgc2NyYXRjaDFSZWcsIHJlZ1QzKTsKIH0KIApAQCAtMTc5Miw3ICsxODQ2LDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRv
d0NoaWNrZW4oKSk7CiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7Ci0gICAgc3RhdGljX2Fzc2Vy
dChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhh
dmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVy
bGFwKHJlZ1QwLCBub25BcmdHUFIwLCByZWdUMiksICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYg
dGhpcyBpcyB0cnVlLiIpOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKHJlZ1QwLCByZWdU
MSwganNSZWdUMzIsIHJlZ1Q0KSwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRy
dWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dT
aGFkb3dDaGlja2VuVGFpbD4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7
CiAgICAgewpAQCAtMTgwMCwxNCArMTg1NSwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hh
ZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKICAgICAgICAgZW5zdXJlU2hhZG93
Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNo
MlJlZyk7CiAgICAgfQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlz
VmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2Nv
cGUsIHJlZ1QzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1Zh
bHVlLCBqc1JlZ1QzMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNv
ZGUubV9zY29wZSwgcmVnVDQpOwogICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spLCByZWdUMSk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hh
ZG93UGFja2V0UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCByZWdUMSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpKTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChz
aGFkb3dQYWNrZXRSZWcsIGpzUmVnVDMyLCByZWdUNCwgcmVnVDEsIENhbGxTaXRlSW5kZXgobV9i
eXRlY29kZUluZGV4KSk7CiB9CiAKLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQotCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIG1faXNTaGFyZWFibGUgPSBmYWxzZTsKQEAgLTE4NjgsMjgg
KzE5MjEsMjQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOwotI2Vsc2UK
LSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QxLCByZWdUMCk7Ci0jZW5kaWYKIAogICAg
IGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSwgcmVnVDIpOwogICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExl
c3NUaGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkpOwotICAgIGxvYWRWYWx1
ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQg
KyBpbmRleCkpLCByZXN1bHRSZWdzKTsKKyAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFs
UmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwganNSZWdUMTAp
OwogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGlu
ayh0aGlzKTsKLSAgICBtb3ZlVmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CisgICAg
bW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIGpzUmVnVDEwKTsKIAogICAgIGRvbmUubGluayh0aGlz
KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5
cGVfb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByb3RvdHlwZU9mPigpOwor
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDApOwog
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IGQ0ODQzNGNlZmZhOWU1MjcxNzcyOWMz
NTQ0MDc5NTc4YWNmZTE3ODMuLjQyYWMxMDNmM2VjNjg0ZmI4NmE4ZTIxY2UzOWU3N2ExZmM1YTQw
OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAK
QEAgLTUwLDczICs1MCw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIEpJVDo6ZW1pdF9v
cF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vdj4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9
IGJ5dGVjb2RlLm1fc3JjOwotICAgIAotICAgIGlmIChzcmMuaXNDb25zdGFudCgpKQotICAgICAg
ICBlbWl0U3RvcmUoZHN0LCBnZXRDb25zdGFudE9wZXJhbmQoc3JjKSk7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgZW1pdFN0b3JlKGRz
dCwgcmVnVDEsIHJlZ1QwKTsKLSAgICB9Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2VuZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIEFTU0VSVChyZXR1cm5W
YWx1ZUdQUiAhPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFbmQ+KCk7Ci0gICAgZW1pdExvYWQoYnl0ZWNvZGUubV92YWx1
ZSwgcmVnVDEsIHJldHVyblZhbHVlR1BSKTsKLSAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7
Ci0gICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKLSAgICByZXQoKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRfb3Bfam1wKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbXA+KCk7Ci0gICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0TGFiZWwpOwotICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotfQotCi12b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
ZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1f
b2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgc2l6ZV90IGFsbG9jYXRp
b25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVD
YXBhY2l0eSgpKTsKLSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmly
dHVhbENvbmN1cnJlbnRseTxKU0ZpbmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFs
bG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKLQotICAgIFJlZ2lzdGVySUQgcmVz
dWx0UmVnID0gcmV0dXJuVmFsdWVHUFI7Ci0gICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSBy
ZWdUMTsKLSAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMzsKLQotICAgIGlmICghYWxs
b2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgIGVsc2UgewotICAgICAg
ICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZElt
bVB0cihudWxscHRyKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBK
SVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Ci0gICAg
ICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5s
aW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAg
IGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZyk7Ci0gICAgfQotfQotCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFk
YXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJl
KTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5jZT4oKTsKQEAgLTEyNCwxMyArNTcsMTQgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5
dGVjb2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFs
dWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0TG9hZFBheWxvYWQo
aGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXls
b2FkKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdl
IGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCiAgICAgSnVtcCBoYXNJbnN0
YW5jZVZhbHVlTm90Q2VsbCA9IGVtaXRKdW1wSWZOb3RKU0NlbGwoaGFzSW5zdGFuY2VWYWx1ZSk7
Ci0gICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+
ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDEpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5j
aFB0cihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0ds
b2JhbE9iamVjdCwgbV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbikpKTsK
IAogICAgIC8vIFdlIGtub3cgdGhhdCBjb25zdHJ1Y3RvciBpcyBhbiBvYmplY3QgZnJvbSB0aGUg
d2F5IGJ5dGVjb2RlIGlzIGVtaXR0ZWQgZm9yIGluc3RhbmNlb2YgZXhwcmVzc2lvbnMuCi0gICAg
ZW1pdExvYWRQYXlsb2FkKGNvbnN0cnVjdG9yLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlclBheWxvYWQoY29uc3RydWN0b3IsIHJlZ1QwKTsKIAogICAgIC8vIENoZWNrIHRoYXQg
Y29uc3RydWN0b3IgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnIGkuZS4gdGhlIG9iamVj
dCBpcyBub3QgYSBDLUFQSSB1c2VyIG5vciBhIGJvdW5kIGZ1bmN0aW9uLgogICAgIHRlc3Q4KFpl
cm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZWdUMCk7CkBAIC0xNTksOCAr
OTMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgdXNpbmcgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJz
OjpzY3JhdGNoMUdQUjsKICAgICB1c2luZyBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNj
cmF0Y2gyR1BSOwogCi0gICAgZW1pdExvYWRQYXlsb2FkKHZhbHVlLCB2YWx1ZUpTUi5wYXlsb2Fk
R1BSKCkpOwotICAgIGVtaXRMb2FkUGF5bG9hZChwcm90bywgcHJvdG9KU1IucGF5bG9hZEdQUigp
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZCh2YWx1ZSwgdmFsdWVKU1IucGF5
bG9hZEdQUigpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChwcm90bywgcHJv
dG9KU1IucGF5bG9hZEdQUigpKTsKIAogICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxz
LiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlf
aWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwodmFsdWUpOwpAQCAtMTg4LDEyICsxMjIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5j
ZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFN0b3Jl
Qm9vbChkc3QsIHJlc3VsdEdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2Zf
Y3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikKLXsKLSAgICAvLyBUaGlzIGFsd2F5cyBnb2VzIHRv
IHNsb3cgcGF0aCBzaW5jZSB3ZSBleHBlY3QgaXQgdG8gYmUgcmFyZS4KLSAgICBhZGRTbG93Q2Fz
ZShqdW1wKCkpOwotfQotCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CkBAIC0yMTQsMTUg
KzE0MiwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIHVzaW5nIEJhc2VsaW5lSW5z
dGFuY2VvZlJlZ2lzdGVyczo6cHJvdG9KU1I7CiAgICAgc3RhdGljX2Fzc2VydCh2YWx1ZUpTUiA9
PSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAyPigpKTsKICAgICAvLyBQcm90
byB3aWxsIGJlIHBhc3NlZCBvbiBzdGFjaywganVzdCBtYWtlIHN1cmUgbm8gb3ZlcmxhcAotICAg
IHN0YXRpY19hc3NlcnQoIXByb3RvSlNSLnVzZXMoZ2xvYmFsT2JqZWN0R1BSKSk7Ci0gICAgc3Rh
dGljX2Fzc2VydCghcHJvdG9KU1IudXNlcyhzdHViSW5mb0dQUikpOwotICAgIHN0YXRpY19hc3Nl
cnQoIXZhbHVlSlNSLnVzZXMoZ2xvYmFsT2JqZWN0R1BSKSk7Ci0gICAgc3RhdGljX2Fzc2VydCgh
dmFsdWVKU1IudXNlcyhzdHViSW5mb0dQUikpOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFw
KHZhbHVlSlNSLCBwcm90b0pTUiwgZ2xvYmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUikpOwogCiAg
ICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOwogICAgIGxvYWRDb25zdGFudChn
ZW4ubV91bmxpbmtlZFN0dWJJbmZvQ29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwotICAgIGVt
aXRMb2FkVGFnKHZhbHVlLCB2YWx1ZUpTUi50YWdHUFIoKSk7Ci0gICAgZW1pdExvYWRUYWcocHJv
dG8sIHByb3RvSlNSLnRhZ0dQUigpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZh
bHVlLCB2YWx1ZUpTUi50YWdHUFIoKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyhw
cm90bywgcHJvdG9KU1IudGFnR1BSKCkpOwogICAgIGNhbGxPcGVyYXRpb248U2xvd09wZXJhdGlv
bj4oCiAgICAgICAgIEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZlNsb3dPcGVyYXRpb24oKSksCiAgICAgICAgIGRzdCwKQEAgLTIzMCw4MyArMTU1LDI1IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2Vv
Zl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0
YW5jZW9mQ3VzdG9tPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIFZp
cnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNl
VmFsdWU7Ci0KLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0TG9h
ZFBheWxvYWQoY29uc3RydWN0b3IsIHJlZ1QyKTsKLSAgICBlbWl0TG9hZChoYXNJbnN0YW5jZVZh
bHVlLCByZWdUNCwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VP
ZkN1c3RvbSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpKTsKLSAgICBl
bWl0U3RvcmVCb29sKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotICAgIAogdm9pZCBKSVQ6OmVt
aXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKLSAgICBlbWl0TG9hZCh2
YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMSwgcmVnVDApOwogICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSwgcmVnVDApOwogCiAgICAgZW1pdFN0b3JlQm9vbChkc3Qs
IHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLSAgICAKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVn
VDEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMSk7Ci0KLSAg
ICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVk
VGFnKSwgcmVnVDApOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICAKLSAgICBpc0NlbGwu
bGluayh0aGlzKTsKLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRl
c3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IGp1bXAoKTsKLSAgICAKLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsK
LSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QxKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1
cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGNvbXBhcmUzMihFcXVhbCwg
cmVnVDAsIHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxp
bmsodGhpcyk7Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRTdG9yZUJvb2woZHN0LCBy
ZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdExvYWRUYWcodmFsdWUsIHJlZ1Qw
KTsKLSAgICBzdGF0aWNfYXNzZXJ0KChKU1ZhbHVlOjpVbmRlZmluZWRUYWcgKyAxID09IEpTVmFs
dWU6Ok51bGxUYWcpICYmIChKU1ZhbHVlOjpOdWxsVGFnICYgMHgxKSwgIiIpOwotICAgIG9yMzIo
VHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQm9vbChk
c3QsIHJlZ1QwKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CiAgICAgCi0gICAgZW1pdExvYWRUYWcodmFsdWUsIHJlZ1QwKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZhbHVlLCByZWdUMCk7CiAgICAgY29tcGFyZTMyKEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCByZWdUMCk7CiAg
ICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKIH0KQEAgLTMxNyw3ICsxODQsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAotICAgIGVtaXRM
b2FkVGFnKHZhbHVlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyh2YWx1
ZSwgcmVnVDApOwogICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwogICAgIGNvbXBh
cmUzMihCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcgKyAxKSwg
cmVnVDApOwogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7CkBAIC0zMzYsNyArMjAzLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX29wZXJhbmQ7CiAgICAgaW50IHR5cGUgPSBieXRlY29kZS5tX3R5cGU7CiAKLSAgICBlbWl0
TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMSwgcmVnVDApOwogICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QxKTsKIAogICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5
cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7CkBAIC0zNTUs
NyArMjIyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
IAotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QxLCByZWdUMCk7CiAgICAgSnVtcCBpc05vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDEpOwogCiAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVj
dFR5cGUpLCByZWdUMCk7CkBAIC0zNzQsNyArMjQxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
cHJpbWl0aXZlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBz
cmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDEsIHJlZ1QwKTsKIAogICAgIEp1
bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmT2JqZWN0KHJlZ1QwKSk7CkBAIC0zOTAsNyArMjU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
dG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKIAotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDEsIHJlZ1QwKTsKIAog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMSkpOwogICAgIEp1bXAgZG9uZSA9
IGJyYW5jaElmU3ltYm9sKHJlZ1QwKTsKQEAgLTQwMSwxMTkgKzI2OCwyOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZnVuYyA9IGJ5dGVj
b2RlLm1fZnVuY3Rpb247Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG5hbWUgPSBieXRlY29kZS5tX25h
bWU7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGZ1bmMsIHJlZ1QxKTsKLSAgICBlbWl0TG9hZChuYW1l
LCByZWdUMywgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25O
YW1lLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcE5vdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKIAotICAgIGVtaXRMb2FkVGFnKHNyYywgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJUYWcoc3JjLCByZWdUMCk7CiAKLSAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdU
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QxLCByZWdUMCk7CiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RCb29sZWFuKHJlZ1QxLCBJbnZhbGlkR1BSUmVnKSk7CiAg
ICAgeG9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CiAKICAgICBlbWl0U3RvcmVCb29sKGRz
dCwgcmVnVDAsIChkc3QgPT0gc3JjKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2pmYWxzZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNlPigpOwotICAgIFZpcnR1YWxSZWdp
c3RlciBjb25kID0gYnl0ZWNvZGUubV9jb25kaXRpb247Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwot
Ci0gICAgZW1pdExvYWQoY29uZCwgcmVnVDEsIHJlZ1QwKTsKLQotICAgIEpTVmFsdWVSZWdzIHZh
bHVlKHJlZ1QxLCByZWdUMCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7Ci0gICAgR1BS
UmVnIHNjcmF0Y2gyID0gcmVnVDM7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSB0cnVlOwotICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgdmFsdWUs
IHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRh
cmdldCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKdHJ1ZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZCA9IGJ5dGVjb2Rl
Lm1fY29uZGl0aW9uOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLQotICAgIGVtaXRMb2FkKGNvbmQs
IHJlZ1QxLCByZWdUMCk7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSB0cnVlOwotICAgIEpTVmFsdWVSZWdzIHZhbHVlKHJlZ1QxLCByZWdUMCk7Ci0gICAgR1BS
UmVnIHNjcmF0Y2gxID0gcmVnVDI7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7Ci0gICAg
YWRkSnVtcChicmFuY2hJZlRydXRoeSh2bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBm
cFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fcHJv
ZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
LXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcU51bGw+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0TGFiZWwpOwotCi0gICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwotCi0gICAg
SnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7Ci0KLSAgICBKdW1wIGlz
Tm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9m
aWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFu
Y2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0
KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElz
Rm9yZWlnbiA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNl
cyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHN0
YXRpY19hc3NlcnQoKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyArIDEgPT0gSlNWYWx1ZTo6TnVsbFRh
ZykgJiYgKEpTVmFsdWU6Ok51bGxUYWcgJiAweDEpLCAiIik7Ci0gICAgb3IzMihUcnVzdGVkSW1t
MzIoMSksIHJlZ1QxKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmTnVsbChyZWdUMSksIHRhcmdldCk7
Ci0KLSAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBtYXNx
dWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOwotfQotCi12b2lkIEpJVDo6
ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
LXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxs
PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKLQotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKLQotICAg
IEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwotCi0gICAgYWRkSnVt
cChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7
Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBB
ZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0
YXJnZXQpOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgLy8gTm93
IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1t
ZWRpYXRlLmxpbmsodGhpcyk7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChKU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcgKyAxID09IEpTVmFsdWU6Ok51bGxUYWcpICYmIChKU1ZhbHVlOjpOdWxsVGFnICYgMHgx
KSwgIiIpOwotICAgIG9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAgYWRkSnVtcChi
cmFuY2hJZk5vdE51bGwocmVnVDEpLCB0YXJnZXQpOwotCi0gICAgd2FzTm90SW1tZWRpYXRlLmxp
bmsodGhpcyk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnVuZGVmaW5lZE9yTnVsbD4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKIAotICAgIGVtaXRMb2FkVGFnKHZhbHVlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlclRhZyh2YWx1ZSwgcmVnVDApOwogICAgIHN0YXRpY19hc3NlcnQoKEpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyArIDEgPT0gSlNWYWx1ZTo6TnVsbFRhZykgJiYgKEpTVmFsdWU6Ok51bGxUYWcg
JiAweDEpLCAiIik7CiAgICAgb3IzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKICAgICBhZGRK
dW1wKGJyYW5jaElmTnVsbChyZWdUMCksIHRhcmdldCk7CkBAIC01MjUsNyArMzAxLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdExvYWRUYWcodmFsdWUsIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZhbHVlLCByZWdUMCk7CiAgICAg
c3RhdGljX2Fzc2VydCgoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnICsgMSA9PSBKU1ZhbHVlOjpOdWxs
VGFnKSAmJiAoSlNWYWx1ZTo6TnVsbFRhZyAmIDB4MSksICIiKTsKICAgICBvcjMyKFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoSWZOb3ROdWxsKHJlZ1QwKSwgdGFy
Z2V0KTsKQEAgLTUzNSwxMyArMzExLDEyIEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9wdHIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcVB0cj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVyID0g
Z2V0Q29uc3RhbnRPcGVyYW5kKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpOwotICAgIEFTU0VS
VChzcGVjaWFsUG9pbnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAg
ZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjLCByZWdUMSwgcmVnVDApOwogICAgIEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMSk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRy
KHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSksIHRhcmdldCk7CisgICAgbG9hZENvZGVCbG9ja0Nv
bnN0YW50UGF5bG9hZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMik7CisgICAgYWRk
SnVtcChicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiksIHRhcmdldCk7CiAgICAgbm90Q2Vs
bC5saW5rKHRoaXMpOwogfQogCkBAIC01NDksMTMgKzMyNCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBKU1ZhbHVlIHNw
ZWNpYWxQb2ludGVyID0gZ2V0Q29uc3RhbnRPcGVyYW5kKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50
ZXIpOwotICAgIEFTU0VSVChzcGVjaWFsUG9pbnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwogCi0gICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMSwgcmVnVDApOwogICAgIEp1bXAgbm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMSk7Ci0gICAgSnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW1QdHIoc3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAgICBsb2Fk
Q29kZUJsb2NrQ29uc3RhbnRQYXlsb2FkKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJlZ1Qy
KTsKKyAgICBKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIpOwogICAg
IG5vdENlbGwubGluayh0aGlzKTsKICAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMigx
KSwgYnl0ZWNvZGUsIE9wSm5lcVB0cjo6TWV0YWRhdGE6Om9mZnNldE9mSGFzSnVtcGVkKCkpOwog
ICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwpAQCAtNTcwLDcgKzM0NCw4IEBAIHZvaWQgSklU
OjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdExvYWQyKHNyYzEsIHJlZ1QxLCBy
ZWdUMCwgc3JjMiwgcmVnVDMsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YzEsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCByZWdU
MywgcmVnVDIpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVn
VDMpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDEpKTsKICAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihCZWxvdywgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RU
YWcpKSk7CkBAIC01OTUsMTMgKzM3MCwxNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRQogICAg
IGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hJZk5vdFN0cmluZyhyZWdUMikpOwogCiAgICAgLy8g
U3RyaW5nIGNhc2UuCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEs
IG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIpOworICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZVN0cmluZ0VxLCByZWdUMSwgcmVnVDAsIHJlZ1QyKTsKICAgICBzdG9yZVJlc3VsdC5hcHBl
bmQoanVtcCgpKTsKIAogICAgIC8vIEdlbmVyaWMgY2FzZS4KICAgICBnZW5lcmljQ2FzZS5hcHBl
bmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCiAgICAgZ2VuZXJpY0Nhc2UubGluayh0
aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgbV9wcm9maWxlZENv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAKICAgICBzdG9yZVJlc3Vs
dC5saW5rKHRoaXMpOwogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBA
IC02MTQsNyArMzkxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29k
ZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0g
ICAgZW1pdExvYWQyKHNyYzEsIHJlZ1QxLCByZWdUMCwgc3JjMiwgcmVnVDMsIHJlZ1QyKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMyLCByZWdUMywgcmVnVDIpOwogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkNlbGwocmVnVDEpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywgcmVnVDEsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CkBAIC02MzQsMTQgKzQxMiwxNiBAQCB2
b2lkIEpJVDo6Y29tcGlsZU9wRXFKdW1wU2xvdyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyLCBDb21waWxlT3BFcQogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hJZk5v
dFN0cmluZyhyZWdUMikpOwogCiAgICAgLy8gU3RyaW5nIGNhc2UuCi0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCByZWdUMCwgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCByZWdUMSwgcmVnVDAsIHJl
Z1QyKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIodHlwZSA9PSBDb21waWxl
T3BFcVR5cGU6OkVxID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZhbHVlR1BSKSwganVtcFRhcmdl
dCk7CiAgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8vIEdlbmVyaWMgY2FzZS4KICAg
ICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCiAgICAg
Z2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVFcSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdU
NCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7
CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKHR5cGUgPT0gQ29tcGlsZU9wRXFU
eXBlOjpFcSA/IE5vblplcm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQUiksIGp1bXBUYXJnZXQpOwog
CiAgICAgZG9uZS5saW5rKHRoaXMpOwpAQCAtNjYxLDcgKzQ0MSw4IEBAIHZvaWQgSklUOjplbWl0
X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YzIgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRMb2FkMihzcmMxLCByZWdUMSwgcmVnVDAs
IHNyYzIsIHJlZ1QzLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBy
ZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgcmVnVDMsIHJl
Z1QyKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QxKSk7CiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkp
OwpAQCAtNjg2LDEzICs0NjcsMTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2UKICAgICBnZW5l
cmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDIpKTsKIAogICAgIC8vIFN0cmlu
ZyBjYXNlLgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX3By
b2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVT
dHJpbmdFcSwgcmVnVDEsIHJlZ1QwLCByZWdUMik7CiAgICAgc3RvcmVSZXN1bHQuYXBwZW5kKGp1
bXAoKSk7CiAKICAgICAvLyBHZW5lcmljIGNhc2UuCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdl
dFNsb3dDYXNlKGl0ZXIpKTsgLy8gZG91YmxlcwogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIG1fcHJvZmlsZWRDb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogCiAgICAgc3RvcmVSZXN1bHQubGlu
ayh0aGlzKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmV0dXJuVmFsdWVHUFIpOwpA
QCAtNzA2LDcgKzQ4OSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVj
b2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CiAK
LSAgICBlbWl0TG9hZDIoc3JjMSwgcmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVnVDIpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIHJlZ1QzLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMykpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmQ2VsbChyZWdUMSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEJlbG93LCByZWdUMSwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKQEAgLTcyOSw3ICs1MTMsOCBAQCB2
b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAg
IFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0TG9hZDIo
c3JjMSwgcmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYzIsIHJlZ1QzLCByZWdUMik7CiAKICAgICAvLyBCYWlsIGlmIHRoZSB0YWdzIGRpZmZl
ciwgb3IgYXJlIGRvdWJsZS4KICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDEsIHJlZ1QzKSk7CkBAIC03NjksMTEgKzU1NCwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3Ry
aWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdExvYWQyKHNyYzEsIHJlZ1QxLCByZWdU
MCwgc3JjMiwgcmVnVDMsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEs
IHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCByZWdUMywg
cmVnVDIpOwogCiAgICAgLy8gQmFpbCBpZiB0aGUgdGFncyBkaWZmZXIsIG9yIGFyZSBkb3VibGUu
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMykpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKEJlbG93LCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
Okxvd2VzdFRhZykpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywgcmVnVDAsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CiAKICAgICAvLyBKdW1wIHRvIGEgc2xv
dyBjYXNlIGlmIGJvdGggYXJlIHN0cmluZ3Mgb3Igc3ltYm9scyAobm9uIG9iamVjdCkuCiAgICAg
SnVtcCBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKQEAgLTgwNSw3ICs1OTEsOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1Q0LCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwog
fQogCkBAIC04MTUsOTEgKzYwMiwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3Rl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOwog
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVT
dHJpY3RFcSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmlj
dEVxLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVy
blZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNv
ZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwotICAgIEp1
bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwotCi0gICAgSnVtcCBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QxKTsKLSAgICBK
dW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwg
cmVnVDIpOwotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAg
SnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRo
aXMpOwotCi0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
Ok51bGxUYWcpLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QxKTsKLSAgICBvcjMyKHJlZ1QyLCByZWdU
MSk7Ci0KLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0KLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVn
VDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
LQotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRl
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBl
SW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkp
OwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAgSnVtcCB3YXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmls
ZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBj
b21wYXJlMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIEp1bXAgd2FzTm90
SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLQotICAg
IGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFn
KSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMSk7Ci0gICAgYW5kMzIocmVnVDIsIHJlZ1QxKTsK
LQotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQubGluayh0aGlzKTsKLQotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMSk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUaHJvdz4oKTsKLSAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwotICAg
IGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50
cnlGcmFtZSk7Ci0gICAgZW1pdExvYWQoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDEsIHJlZ1QwKTsK
LSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgbV9wcm9m
aWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkp
OwotICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7Ci19Ci0KIHZvaWQgSklUOjplbWl0
X29wX3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0TG9hZChzcmMsIHJl
Z1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QxLCByZWdU
MCk7CiAKICAgICBKdW1wIGlzSW50MzIgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKICAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6TG93ZXN0VGFnKSkpOwpAQCAtOTE3LDcgKzYzMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Rv
X251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIEpTVmFsdWVSZWdzIGFy
Z3VtZW50VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAKLSAgICBlbWl0TG9hZChzcmMsIHJlZ1Qx
LCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QxLCByZWdUMCk7
CiAKICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7CiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7CkBAIC05MzgsNyArNjUyLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owog
ICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0
TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMs
IHJlZ1QxLCByZWdUMCk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDEp
KTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwpAQCAtOTUzLDcg
KzY2Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0g
ICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjLCByZWdUMSwgcmVnVDApOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxs
KHJlZ1QxKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKQEAg
LTEwMjUsNzQgKzczOSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBlbWl0TG9h
ZFBheWxvYWQoY3VycmVudFNjb3BlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
clBheWxvYWQoY3VycmVudFNjb3BlLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKICAgICBlbWl0U3RvcmVDZWxsKGJ5
dGVjb2RlLm1fZHN0LCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0o
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN3aXRjaEltbT4oKTsKLSAgICBzaXplX3Qg
dGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsKLSAgICB1bnNpZ25lZCBkZWZhdWx0
T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVs
dE9mZnNldCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2Ny
dXRpbmVlOwotCi0gICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlv
bnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBs
ZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPnVubGlua2Vk
U3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07Ci0gICAgbV9zd2l0Y2hlcy5h
cHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9m
ZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKLSAgICBsaW5rZWRUYWJsZS5lbnN1cmVD
VElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKLQotICAgIGVtaXRMb2FkKHNjcnV0aW5lZSwgcmVnVDEs
IHJlZ1QwKTsKLSAgICBhdXRvIG5vdEludDMyID0gYnJhbmNoSWZOb3RJbnQzMihyZWdUMSk7Ci0g
ICAgc3ViMzIoSW1tMzIodW5saW5rZWRUYWJsZS5tX21pbiksIHJlZ1QwKTsKLQotICAgIGFkZEp1
bXAoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMCwgSW1tMzIobGlua2VkVGFibGUubV9jdGlP
ZmZzZXRzLnNpemUoKSkpLCBkZWZhdWx0T2Zmc2V0KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bGlua2VkVGFibGUubV9jdGlPZmZzZXRzLmRhdGEoKSksIHJlZ1QxKTsKLSAgICBsb2FkUHRyKEJh
c2VJbmRleChyZWdUMSwgcmVnVDAsIFNjYWxlUHRyKSwgcmVnVDEpOwotICAgIGZhckp1bXAocmVn
VDEsIE5vUHRyVGFnKTsKLQotICAgIG5vdEludDMyLmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlUeXBl
LCAmdm0oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgdGFibGVJbmRleCwgdW5saW5rZWRU
YWJsZS5tX21pbik7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wU3dpdGNoQ2hhcj4oKTsKLSAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1f
dGFibGVJbmRleDsKLSAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwotCi0gICAgLy8gY3JlYXRl
IGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0
YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJs
ZSA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07Ci0gICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxl
SW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFy
YWN0ZXIpKTsKLSAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsK
LQotICAgIGVtaXRMb2FkKHNjcnV0aW5lZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIG1fcHJvZmlsZWRDb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJsZUlu
ZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBO
b1B0clRhZyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFN3aXRjaFN0cmluZz4oKTsKLSAgICBzaXplX3QgdGFibGVJ
bmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsKLSAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNl
dCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVl
OwotCi0gICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRy
YWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBU
YWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPnVubGlua2VkU3RyaW5n
U3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlua2Vk
VGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07Ci0gICAgbV9zd2l0
Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVm
YXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKLSAgICBsaW5rZWRUYWJsZS5lbnN1
cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKLQotICAgIGVtaXRMb2FkKHNjcnV0aW5lZSwgcmVn
VDEsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhV
bmtub3duS2V5VHlwZSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJuVmFs
dWVHUFIsIE5vUHRyVGFnKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBlbWl0RW50ZXJPcHRpbWl6YXRp
b25DaGVjaygpOwpAQCAtMTEwMCw3ICs3NTEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIC8vIEV2ZW4gdGhvdWdo
IEpJVCBjb2RlIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAg
ICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3Nh
cmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdD
IHByZXNzdXJlLgotICAgIGZvciAodW5zaWduZWQgaSA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGlu
ZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBpIDwgbV9wcm9maWxlZENvZGVC
bG9jay0+bnVtVmFycygpOyArK2kpCisgICAgc2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENvZGVC
bG9jay0+bnVtVmFycygpOworICAgIGZvciAoc2l6ZV90IGkgPSBDb2RlQmxvY2s6OmxsaW50QmFz
ZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaSA8IGNvdW50OyArK2kp
CiAgICAgICAgIGVtaXRTdG9yZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwganNVbmRlZmlu
ZWQoKSk7CiAKICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudGVyKTsKQEAgLTExMTYsMTY0ICs3NjgsMTMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
LXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRo
aXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVk
Q29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxs
ZWU7Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRh
ZGF0YS5tX2NhY2hlZENhbGxlZTsKLSAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwot
ICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsKLSAgICBSZWdpc3RlcklEIHJlc3Vs
dFJlZyA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7Ci0gICAg
UmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMjsKLSAgICBSZWdpc3RlcklEIGNhY2hlZEZ1
bmN0aW9uUmVnID0gcmVnVDQ7Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDM7Ci0K
LSAgICBlbWl0TG9hZFBheWxvYWQoY2FsbGVlLCBjYWxsZWVSZWcpOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVlUmVnKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKGNh
bGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmFy
ZURhdGFSZWcpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmFyZURhdGFS
ZWcsIFRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpKTsKLSAgICBsb2FkMzIo
QWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBlOjpv
ZmZzZXRPZkFsbG9jYXRvcigpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBhbGxvY2F0b3JS
ZWcpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6
b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2Zp
bGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZlN0cnVjdHVyZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURh
dGFUYWcpLCBzdHJ1Y3R1cmVSZWcpOwotCi0gICAgbG9hZFB0cihjYWNoZWRGdW5jdGlvbiwgY2Fj
aGVkRnVuY3Rpb25SZWcpOwotICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcyA9IGJyYW5j
aFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1QdHIoSlNDZWxsOjpzZWVu
TXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90
RXF1YWwsIGNhbGxlZVJlZywgY2FjaGVkRnVuY3Rpb25SZWcpKTsKLSAgICBoYXNTZWVuTXVsdGlw
bGVDYWxsZWVzLmxpbmsodGhpcyk7Ci0KLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgYXV0
byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwotICAgIGVtaXRBbGxvY2F0ZUpT
T2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcs
IHN0cnVjdHVyZVJlZywgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwotICAgIGxv
YWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0
KCkpLCBzY3JhdGNoUmVnKTsKLSAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0
UmVnLCBzY3JhdGNoUmVnKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVtaXRT
dG9yZUNlbGwoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2sp
OwotICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2NhY2hl
ZFN0cnVjdHVyZUlEOwotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIgPSBieXRlY29k
ZS5tX3NyY0RzdDsKLQotICAgIGVtaXRMb2FkKHRoaXNSZWdpc3RlciwgcmVnVDMsIHJlZ1QyKTsK
LQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMykpOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90VHlwZShyZWdUMiwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0g
ICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIpKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3Bf
Y2hlY2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsKLSAg
ICBlbWl0TG9hZFRhZyhieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDApOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVn
aXN0ZXIsIHJlZ1QwKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKLSAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5
cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwotCi0g
ICAgLy8gTG9hZCBwYXlsb2FkIGluIFQwLiBMb2FkIHRhZyBpbiBUMy4KLSAgICBlbWl0TG9hZFBh
eWxvYWQodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZFRhZyh2YWx1ZVRvUHJv
ZmlsZSwgcmVnVDMpOwotCi0gICAgSnVtcExpc3QganVtcFRvRW5kOwotCi0gICAganVtcFRvRW5k
LmFwcGVuZChicmFuY2hJZkVtcHR5KHJlZ1QzKSk7Ci0KLSAgICAvLyBDb21waWxlIGluIGEgcHJl
ZGljdGl2ZSB0eXBlIGNoZWNrLCBpZiBwb3NzaWJsZSwgdG8gc2VlIGlmIHdlIGNhbiBza2lwIHdy
aXRpbmcgdG8gdGhlIGxvZy4KLSAgICAvLyBUaGVzZSB0eXBlY2hlY2tzIGFyZSBpbmxpbmVkIHRv
IG1hdGNoIHRob3NlIG9mIHRoZSAzMi1iaXQgSlNWYWx1ZSB0eXBlIGNoZWNrcy4KLSAgICBpZiAo
Y2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlVW5kZWZpbmVkKQotICAg
ICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmVW5kZWZpbmVkKHJlZ1QzKSk7Ci0gICAgZWxz
ZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlTnVsbCkKLSAg
ICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZk51bGwocmVnVDMpKTsKLSAgICBlbHNlIGlm
IChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVCb29sZWFuKQotICAg
ICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmQm9vbGVhbihyZWdUMywgSW52YWxpZEdQUlJl
ZykpOwotICAgIGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0g
VHlwZUFueUludCkKLSAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZkludDMyKHJlZ1Qz
KSk7Ci0gICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBU
eXBlTnVtYmVyKSB7Ci0gICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZOdW1iZXIoSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QwKSwgcmVnVDEpKTsKLSAgICB9IGVsc2UgaWYgKGNhY2hlZFR5
cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZVN0cmluZykgewotICAgICAgICBKdW1w
IGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMyk7Ci0gICAgICAgIGp1bXBUb0VuZC5h
cHBlbmQoYnJhbmNoSWZTdHJpbmcocmVnVDApKTsKLSAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhp
cyk7Ci0gICAgfQotCi0gICAgLy8gTG9hZCB0aGUgdHlwZSBwcm9maWxpbmcgbG9nIGludG8gVDIu
Ci0gICAgVHlwZVByb2ZpbGVyTG9nKiBjYWNoZWRUeXBlUHJvZmlsZXJMb2cgPSBtX3ZtLT50eXBl
UHJvZmlsZXJMb2coKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY2FjaGVkVHlwZVByb2ZpbGVy
TG9nKSwgcmVnVDIpOwotCi0gICAgLy8gTG9hZCB0aGUgbmV4dCBsb2cgZW50cnkgaW50byBUMS4K
LSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFR5cGVQcm9maWxlckxvZzo6Y3VycmVudExvZ0Vu
dHJ5T2Zmc2V0KCkpLCByZWdUMSk7Ci0KLSAgICAvLyBTdG9yZSB0aGUgSlNWYWx1ZSBvbnRvIHRo
ZSBsb2cgZW50cnkuCi0gICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhyZWdUMSwgVHlwZVByb2Zp
bGVyTG9nOjpMb2dFbnRyeTo6dmFsdWVPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAgIHN0b3JlMzIocmVnVDMsIEFkZHJlc3MocmVnVDEs
IFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnZhbHVlT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotCi0gICAgLy8gU3RvcmUgdGhlIHN0cnVjdHVy
ZUlEIG9mIHRoZSBjZWxsIGlmIGFyZ3VtZW50IGlzIGEgY2VsbCwgb3RoZXJ3aXNlLCBzdG9yZSAw
IG9uIHRoZSBsb2cgZW50cnkuCi0gICAgSnVtcCBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QzKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDApOwotICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDEsIFR5cGVQcm9m
aWxlckxvZzo6TG9nRW50cnk6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKLSAgICBKdW1wIHNraXBO
b3RDZWxsID0ganVtcCgpOwotICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICBzdG9yZTMyKFRy
dXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhyZWdUMSwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6
c3RydWN0dXJlSURPZmZzZXQoKSkpOwotICAgIHNraXBOb3RDZWxsLmxpbmsodGhpcyk7Ci0KLSAg
ICAvLyBTdG9yZSB0aGUgdHlwZUxvY2F0aW9uIG9uIHRoZSBsb2cgZW50cnkuCi0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVMb2NhdGlvbiksIHJlZ1QwKTsKLSAgICBzdG9yZTMyKHJl
Z1QwLCBBZGRyZXNzKHJlZ1QxLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojpsb2NhdGlvbk9m
ZnNldCgpKSk7Ci0KLSAgICAvLyBJbmNyZW1lbnQgdGhlIGN1cnJlbnQgbG9nIGVudHJ5LgotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnkpKSwg
cmVnVDEpOwotICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDIsIFR5cGVQcm9maWxlckxv
Zzo6Y3VycmVudExvZ0VudHJ5T2Zmc2V0KCkpKTsKLSAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5j
aFB0cihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW1QdHIoY2FjaGVkVHlwZVByb2ZpbGVyTG9n
LT5sb2dFbmRQdHIoKSkpKTsKLSAgICAvLyBDbGVhciB0aGUgbG9nIGlmIHdlJ3JlIGF0IHRoZSBl
bmQgb2YgdGhlIGxvZy4KLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRp
b25Qcm9jZXNzVHlwZVByb2ZpbGVyTG9nLCAmdm0oKSk7Ci0KLSAgICBqdW1wVG9FbmQubGluayh0
aGlzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3Vl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgUkVMRUFTRV9B
U1NFUlQodm0oKS5zaGFkb3dDaGlja2VuKCkpOwotICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwot
ICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJl
Z1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5Qcm9s
b2d1ZT4oKTsKLSAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7Ci0gICAgR1BSUmVn
IHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50
IHJlZ2lzdGVyLgotICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNo
YWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2Ny
YXRjaDJSZWcpOwotCi0gICAgc2NyYXRjaDFSZWcgPSByZWdUNDsKLSAgICBlbWl0TG9hZFBheWxv
YWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1
ZVBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCByZWdUMyk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlj
a2VuKCkpOwotICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwotICAgIHN0YXRpY19hc3NlcnQobm9u
QXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHBy
b2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwotICAgIEdQUlJlZyBzaGFk
b3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIw
OyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCi0gICAgR1BSUmVnIHNj
cmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBz
aGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAgZW1pdExvYWRQ
YXlsb2FkKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMik7Ci0gICAgZW1pdExvYWRUYWcoYnl0
ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyB0aGlzUmVncyhyZWdU
MSwgcmVnVDIpOwotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7
Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlzUmVn
cywgcmVnVDMsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jayksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYg
Ly8gVVNFKEpTVkFMVUUzMl82NCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggOTU3Njk1YjMwZTkzOTliYmEwZTMwZjJlZmY0OTBkMzBm
YjY3Y2I1Zi4uZjAyZjRhYTU5ZDk2YWUxNTU1ZWEzMmVjMWEyZjUxNzA1ZjRiMWU4NiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTc3
NSwxNCArNzc1LDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHCiB9CiAjZW5kaWYgLy8gRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRHZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUu
bV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVn
VDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fYWNjZXNz
b3IsIHJlZ1QxKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJl
Z1QxKTsKIH0KQEAgLTc5MCw5ICs3ODgsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVy
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9i
YXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUu
bV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVn
VDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fYWNjZXNz
b3IsIHJlZ1QxKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJl
Z1QxKTsKIH0KQEAgLTgwMCwxMCArNzk4LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0
ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBh
eWxvYWQoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBi
eXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2dldHRlciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9zZXR0ZXIsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChieXRl
Y29kZS5tX2dldHRlciwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2Fk
KGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QzLCByZWdU
MCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5p
bXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKIH0KQEAgLTgxMSwyNiArODA5LDQwIEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKworICAg
IHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCk7
CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUlAgPSBwcmVmZXJyZWRBcmd1bWVu
dEdQUjxTbG93T3BlcmF0aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7CisgICAgY29uc3RleHBy
IEpTVmFsdWVSZWdzIHByb3BlcnR5SlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJh
dGlvbiwgMj4oKTsKKyAgICAvLyBBdHRyaWJ1dGVzIGluIGFyZ3VtZW50IDMKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHNldHRlckdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24s
IDQ+KCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChieXRlY29kZS5tX2Jh
c2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSwgcHJvcGVydHlKU1IpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNz
b3IsIHJlZ1QyKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1
dGVzLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUu
bV9hY2Nlc3Nvciwgc2V0dGVyR1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVj
dEdSUCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgZ2xvYmFs
T2JqZWN0R1JQLCBiYXNlR1BSLCBwcm9wZXJ0eUpTUiwgYXR0cmlidXRlcywgc2V0dGVyR1BSKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0g
Ynl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVn
VDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKLX0KIAotI2VuZGlmCisgICAgdXNpbmcgU2xvd09wZXJh
dGlvbiA9IGRlY2x0eXBlKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsKTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGdsb2JhbE9iamVjdEdSUCA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRp
b24sIDA+KCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcHJlZmVycmVkQXJndW1l
bnRHUFI8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcHJv
cGVydHlKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAyPigpOworICAg
IC8vIEF0dHJpYnV0ZXMgaW4gYXJndW1lbnQgMworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2V0dGVy
R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgND4oKTsKKworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fYmFzZSwgYmFzZUdQUik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBwcm9wZXJ0eUpT
Uik7CisgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHNldHRl
ckdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUlApOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIGdsb2JhbE9iamVjdEdSUCwgYmFzZUdQ
UiwgcHJvcGVydHlKU1IsIGF0dHJpYnV0ZXMsIHNldHRlckdQUik7Cit9CiAKIHZvaWQgSklUOjpl
bWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewpAQCAtMTk1OCwxMzAgKzE5NzAsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX3ByaXZh
dGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVgogICAgIGVt
aXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29k
ZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogfQogCi0jaWYgVVNFKEpT
VkFMVUU2NCkKLQotdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIg
ZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3Ms
IHVuc2lnbmVkIGRlcHRoKQotewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUs
IHJlZ1QwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKLSAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1Qw
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19Ci0KLQotI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLXZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBSZXNvbHZlVHlw
ZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVC
bG9jaykubV9yZXNvbHZlVHlwZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLQot
ICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKLQotICAgIEp1bXBMaXN0IHNs
b3dDYXNlOwotCi0gICAgYXV0byBkb1ZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52YWxpZEdQUlJl
ZykgewotICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0R1BSID09IEludmFsaWRHUFJSZWcpIHsK
LSAgICAgICAgICAgIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OwotICAgICAgICAgICAgbG9hZEds
b2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOwotICAgICAgICB9Ci0gICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwg
bV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBw
ZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9m
U3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwotICAgIH07Ci0KLSAgICBh
dXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cykgewotICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KTsKLSAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6
TWV0YWRhdGE6Om9mZnNldE9mTG9jYWxTY29wZURlcHRoKCksIHJlZ1QxKTsKLQotICAgICAgICBB
U1NFUlQoc2NvcGVHUFIgPT0gcmVnVDApOwotICAgICAgICBMYWJlbCBsb29wID0gbGFiZWwoKTsK
LSAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKLSAgICAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsK
LSAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAgICAgIGp1bXAoKS5s
aW5rVG8obG9vcCwgdGhpcyk7Ci0gICAgICAgIGRvbmUubGluayh0aGlzKTsKLSAgICB9OwotCi0g
ICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKLSAgICAg
ICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5Ogot
ICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAg
ICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkuCi0gICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QwKTsKLSAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkMzJGcm9tTWV0YWRh
dGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZHbG9iYWxMZXhp
Y2FsQmluZGluZ0Vwb2NoKCksIHJlZ1QxKTsKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChi
cmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9m
R2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBHbG9iYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xv
YmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2Fs
VmFyOgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7Ci0gICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkg
bG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSBmb3IgR2xvYmFsVmFyKiwKLSAgICAgICAg
ICAgIC8vIGFuZCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxMZXhpY2FsRW52aXJv
bm1lbnQoKSBmb3IgR2xvYmFsTGV4aWNhbFZhciouCi0gICAgICAgICAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QwKTsKLSAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBpZiAocmVzb2x2
ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVu
dCgpKSwgcmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgotICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEeW5h
bWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgTW9k
dWxlVmFyOgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBV
bnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBpZiAo
cHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIAotICAgICAgICBsb2FkUHRyRnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTGV4aWNh
bEVudmlyb25tZW50KCksIHJlZ1QwKTsKLSAgICBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwotICAgICAgICBpZiAocHJvZmlsZWRSZXNvbHZl
VHlwZSA9PSBDbG9zdXJlVmFyIHx8IHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgICAgICBlbWl0Q29kZShwcm9maWxlZFJlc29s
dmVUeXBlKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjb3BlLCBzY29wZUdQUik7Ci0KLSAgICAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsK
LSAgICAgICAgICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BSZXNvbHZlU2NvcGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZlJlc29sdmVUeXBlKCksIHJlZ1QxKTsKLQotICAgICAgICAgICAg
YXV0byBlbWl0Q2FzZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKLSAgICAgICAg
ICAgICAgICBKdW1wIG5vdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJ
bW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBl
KTsKLSAgICAgICAgICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgICAg
ICAgICAgbm90Q2FzZS5saW5rKHRoaXMpOwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAg
ZW1pdENhc2UoR2xvYmFsVmFyKTsKLSAgICAgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5
KTsKLSAgICAgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXIpOwotICAgICAgICAgICAg
ZW1pdENhc2UoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgICAgICBl
bWl0Q2FzZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICAg
ICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAg
ICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgICAgIHNraXBUb0Vu
ZC5saW5rKHRoaXMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nh
c2UpOwotCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotfQotCi0jZWxzZQogdm9p
ZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUmVzb2x2ZVNjb3BlPigpOwpAQCAtMjA5NCwyMSArMTk4MiwyMCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNvZGVJ
bmRleCk7CiAgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQobV9i
eXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAgLy8gSWYgd2UgcHJv
ZmlsZSBjZXJ0YWluIHJlc29sdmUgdHlwZXMsIHdlJ3JlIGdhdXJhbnRlZWQgYWxsIGxpbmtlZCBj
b2RlIHdpbGwgaGF2ZSB0aGUgc2FtZQorICAgIC8vIElmIHdlIHByb2ZpbGUgY2VydGFpbiByZXNv
bHZlIHR5cGVzLCB3ZSdyZSBndWFyYW50ZWVkIGFsbCBsaW5rZWQgY29kZSB3aWxsIGhhdmUgdGhl
IHNhbWUKICAgICAvLyByZXNvbHZlIHR5cGUuCiAKICAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlw
ZSA9PSBNb2R1bGVWYXIpIAotICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBP
cFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTGV4aWNhbEVudmlyb25tZW50KCksIHJl
Z1QwKTsKKyAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BSZXNvbHZlU2Nv
cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkxleGljYWxFbnZpcm9ubWVudCgpLCByZXR1cm5WYWx1ZUdQ
Uik7CiAgICAgZWxzZSB7CiAgICAgICAgIHVpbnQzMl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxp
bmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUp
OwogCiAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUMjsKICAgICAg
ICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOwotICAgICAgICBjb25zdGV4cHIg
R1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgICAgIGNvbnN0ZXhwciBHUFJS
ZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUMzsKIAotICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQ
YXlsb2FkKHNjb3BlLCBzY29wZUdQUik7CiAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWV0
YWRhdGFPZmZzZXQpLCBzX21ldGFkYXRhR1BSLCBtZXRhZGF0YUdQUik7Ci0KICAgICAgICAgbW92
ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOwpAQCAtMjEz
NCw3ICsyMDIxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbChj
b2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgfQogCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworICAgIGJveENlbGwocmV0dXJuVmFsdWVHUFIsIHJldHVyblZhbHVl
SlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVKU1IpOwog
fQogCiB0ZW1wbGF0ZSA8UmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZT4KQEAgLTIxNTAs
OCArMjAzOCwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZNJiB2bSkKICAgICB1c2luZyBNZXRhZGF0YSA9
IE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTsKICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRh
R1BSID0gcmVnVDI7IC8vIGluY29taW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9
IHJlZ1QwOyAvLyBpbmNvbWluZwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRH
UFIgPSByZWdUNTsgLy8gaW5jb21pbmcgLSBwYXNzIHRocnUgdG8gc2xvdyBwYXRoLgorICAgIGNv
bnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUMzsgLy8gaW5jb21pbmcgLSBw
YXNzIHRocnUgdG8gc2xvdyBwYXRoLgorICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9
IHJlZ1Q1OyAvLyBsb2NhbCB0ZW1wb3JhcnkKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZz
ZXRHUFIpOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKHJldHVyblZhbHVlR1BSLCBtZXRh
ZGF0YUdQUiwgYnl0ZWNvZGVPZmZzZXRHUFIsIHNjcmF0Y2hHUFIpKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KHNjb3BlR1BSID09IHJldHVyblZhbHVlR1BSKTsgLy8gZW1pdFJlc29sdmVDbG9zdXJlIGFz
c3VtZXMgdGhpcwogCiAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIApAQCAtMjE2MSwyMyAr
MjA1MiwyMyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2Vu
ZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZNJiB2bSkKICAgICAgICAgaWYgKCFuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKGdsb2JhbE9i
amVjdEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7Ci0gICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIg
PSByZWdUNDsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhy
ZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BS
KTsKKyAgICAgICAgICAgIGdsb2JhbE9iamVjdEdQUiA9IHNjcmF0Y2hHUFI7CisgICAgICAgICAg
ICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBDb2Rl
QmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAgICAg
ICB9Ci0gICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdU
Myk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhy
ZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52
YWxpZGF0ZWQpKSk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2lu
dCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4KEVx
dWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSks
IFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAKICAgICBhdXRvIGVtaXRS
ZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAg
ICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAg
ICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZMb2Nh
bFNjb3BlRGVwdGgoKSksIHJlZ1QxKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NvcGVHUFIg
PT0gcmVnVDApOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFk
YXRhOjpvZmZzZXRPZkxvY2FsU2NvcGVEZXB0aCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHNjb3BlR1BSID09IHJldHVyblZhbHVlR1BSKTsKIAogICAgICAgICBMYWJl
bCBsb29wID0gaml0LmxhYmVsKCk7Ci0gICAgICAgIEp1bXAgZG9uZSA9IGppdC5icmFuY2hUZXN0
MzIoWmVybywgcmVnVDEpOwotICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Nj
b3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICAgICAgaml0LnN1YjMyKFRydXN0ZWRJ
bW0zMigxKSwgcmVnVDEpOworICAgICAgICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDMyKFpl
cm8sIHNjcmF0Y2hHUFIpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJldHVyblZhbHVl
R1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAg
aml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIGppdC5qdW1w
KCkubGlua1RvKGxvb3AsICZqaXQpOwogICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgfTsK
QEAgLTIxODcsMTEgKzIwNzgsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhWTSYgdm0pCiAgICAgICAgIGNh
c2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9y
Q29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS4KLSAgICAgICAgICAg
IGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMp
OwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZz
ZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKLSAgICAg
ICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9m
R2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxP
YmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKKyAg
ICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hH
UFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJldHVyblZhbHVlR1BSKTsK
KyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBqaXQubG9hZDMyKEFk
ZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5n
RXBvY2goKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5i
cmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZXR1cm5WYWx1ZUdQUiwgSlNHbG9iYWxPYmplY3Q6
Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgc2NyYXRjaEdQUikpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMjIwMSwxMSArMjA5MiwxMSBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVT
Y29wZVRodW5rKFZNJiB2bSkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZv
ckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9yIEdsb2JhbFZh
ciosCiAgICAgICAgICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
TGV4aWNhbEVudmlyb25tZW50KCkgZm9yIEdsb2JhbExleGljYWxWYXIqLgotICAgICAgICAgICAg
aml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMCk7
Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNl
dE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBkb1ZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAgICAg
ICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwg
Q29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmV0dXJuVmFsdWVHUFIpOworICAg
ICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSksIHJldHVyblZhbHVlR1BSKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgp
KSwgcmVnVDApOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmV0dXJuVmFs
dWVHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVudCgp
KSwgcmV0dXJuVmFsdWVHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAtMjI4NCwyNCArMjE3NSwyNSBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJh
dG9yKFZNJiB2bQogICAgIC8vIFRoZSBmYXN0IHBhdGggYWxyZWFkeSBwdXNoZWQgdGhlIHJldHVy
biBhZGRyZXNzLgogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJzOjpl
YnApOwotI2VsaWYgQ1BVKEFSTTY0KQorI2VsaWYgQ1BVKEFSTTY0KSB8fCBDUFUoQVJNX1RIVU1C
MikKICAgICBqaXQucHVzaFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7
CisjZWxpZiBDUFUoTUlQUykKKyAgICBqaXQucHVzaFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIs
IHJldHVybkFkZHJlc3NSZWdpc3Rlcik7CisjZWxzZQorIyAgIGVycm9yICJOb3QgaW1wbGVtZW50
ZWQgb24gcGxhdGZvcm0iCiAjZW5kaWYKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgaW5jb21pbmdC
eXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIGNvbnN0ZXhwciBHUFJSZWcgaW5jb21pbmdC
eXRlY29kZU9mZnNldEdQUiA9IHJlZ1QzOwogICAgIGppdC5zdG9yZTMyKGluY29taW5nQnl0ZWNv
ZGVPZmZzZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcykpOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBjb2RlQmxvY2tHUFIgPSBhcmd1bWVudEdQ
UjM7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBpbnN0cnVjdGlvbkdQUiA9IGFyZ3VtZW50R1BSMTsKKyAgICBzdGF0aWNfYXNzZXJ0
KG5vT3ZlcmxhcChpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSLCBzY3JhdGNoR1BSICwgZ2xvYmFs
T2JqZWN0R1BSLCBpbnN0cnVjdGlvbkdQUikpOwogCi0gICAgc3RhdGljX2Fzc2VydChpbmNvbWlu
Z0J5dGVjb2RlT2Zmc2V0R1BSICE9IGNvZGVCbG9ja0dQUik7Ci0gICAgc3RhdGljX2Fzc2VydChp
bmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSICE9IGdsb2JhbE9iamVjdEdQUik7Ci0gICAgc3RhdGlj
X2Fzc2VydChpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSICE9IGluc3RydWN0aW9uR1BSKTsKLQot
ICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgY29k
ZUJsb2NrR1BSKTsKLSAgICBqaXQubG9hZFB0cihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJs
b2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICBqaXQu
bG9hZFB0cihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkluc3RydWN0
aW9uc1Jhd1BvaW50ZXIoKSksIGluc3RydWN0aW9uR1BSKTsKKyAgICBqaXQubG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHNjcmF0Y2hHUFIpOworICAgIGppdC5s
b2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVj
dCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hH
UFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBpbnN0cnVj
dGlvbkdQUik7CiAgICAgaml0LmFkZFB0cihpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSLCBpbnN0
cnVjdGlvbkdQUik7CiAKICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9u
UmVzb2x2ZVNjb3BlRm9yQmFzZWxpbmUpPihnbG9iYWxPYmplY3RHUFIsIGluc3RydWN0aW9uR1BS
KTsKQEAgLTIzMTEsOCArMjIwMywxMiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJiB2bQogCiAjaWYg
Q1BVKFg4Nl82NCkKICAgICBqaXQucG9wKFg4NlJlZ2lzdGVyczo6ZWJwKTsKLSNlbGlmIENQVShB
Uk02NCkKLSAgICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVy
LCBDQ2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rlcik7CisjZWxpZiBDUFUoQVJNNjQpIHx8IENQVShB
Uk1fVEhVTUIyKQorICAgIGppdC5wb3BQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVn
aXN0ZXIpOworI2VsaWYgQ1BVKE1JUFMpCisgICAgaml0LnBvcFBhaXIoZnJhbWVQb2ludGVyUmVn
aXN0ZXIsIHJldHVybkFkZHJlc3NSZWdpc3Rlcik7CisjZWxzZQorIyAgIGVycm9yICJOb3QgaW1w
bGVtZW50ZWQgb24gcGxhdGZvcm0iCiAjZW5kaWYKICAgICBqaXQucmV0KCk7CiAKQEAgLTIzMjIs
MTcyICsyMjE4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6
OnNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYgdm0KICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGV4Y2VwdGlvbkNoZWNrLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBK
SVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBzbG93X29wX3Jlc29sdmVfc2NvcGUiKTsKIH0KLSNl
bmRpZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLXZvaWQgSklUOjplbWl0TG9hZFdp
dGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVj
dHVyZVNsb3QpCi17Ci0gICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCByZWdUMSk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFRlc3RQdHIoWmVybywgcmVnVDEpKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0
dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZWdUMSkpOwotfQotCi12b2lkIEpJVDo6ZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUq
IG9wZXJhbmQsIEdQUlJlZyByZWcpCi17Ci0gICAgbG9hZFB0cihvcGVyYW5kLCByZWcpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJh
bmQsIEdQUlJlZyByZWcpCi17Ci0gICAgbG9hZFB0cihvcGVyYW5kLCByZWcpOwotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWcpLCByZWcpOwotfQotCi12b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIo
VmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCkKLXsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOwotfQotCi0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9z
Y29wZTsKLSAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Ci0K
LSAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDI7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwotCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2U7Ci0K
LSAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MpIHsKLSAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7Ci0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBt
X3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZT
dGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7Ci0gICAgfTsKLSAgICAKLSAg
ICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewotICAgICAg
ICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0g
ICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAg
ICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2Ug
ZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3Qu
IEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUgdmFy
IGluamVjdGlvbi4KLSAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
R2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgcmVnVDEpOwotICAg
ICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKLSAg
ICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMSk7Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90
RXF1YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QxKSk7Ci0KLSAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4o
WyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIHJlZ1Qz
KTsKLSAgICAgICAgICAgIH0pKTsKLQotICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShi
eXRlY29kZSwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVn
VDEpOwotCi0gICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAgICAg
ICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCByZWdUMSwg
VHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYWJv
cnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAgICAgICBp
c091dE9mTGluZS5saW5rKHRoaXMpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1Qw
KTsKLSAgICAgICAgICAgIG5lZzMyKHJlZ1QxKTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRv
UHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCBy
ZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKSwgcmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBHbG9iYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgotICAgICAgICBjYXNl
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZG9W
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwot
ICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRGcm9tU2NvcGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDApOwotICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09
IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBzbG93Q2Fz
ZS5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKLSAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRh
dGEoYnl0ZWNvZGUsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCks
IHJlZ1QzKTsKLSAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihSZWdp
c3RlcikpOwotICAgICAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCByZWdUMyk7Ci0g
ICAgICAgICAgICBhZGRQdHIoc2NvcGVHUFIsIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMywgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkp
LCByZWdUMCk7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIER5bmFtaWM6Ci0g
ICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBNb2R1bGVWYXI6
Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgICAgICBjYXNlIFVucmVzb2x2
ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGlmIChwcm9maWxl
ZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgcHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgZW1pdENvZGUocHJvZmlsZWRS
ZXNvbHZlVHlwZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAg
ICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEZyb21TY29wZTo6TWV0YWRh
dGE6Om9mZnNldE9mR2V0UHV0SW5mbygpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJ
bW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBp
bnRvIFQwCi0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFs
VmFyKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9i
YWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb24gPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0g
ICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluayh0aGlzKTsKLQotICAgICAg
ICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQ
cm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7Ci0g
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7Ci0gICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZh
ci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOwotCi0g
ICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgIH0KLQotICAgIGFkZFNsb3dDYXNlKHNs
b3dDYXNlKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNj
b3BlPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLQotICAg
IGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFBy
b2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBhcmd1bWVudEdQUjAs
IGluc3RydWN0aW9uKTsKLX0KLQotI2Vsc2UKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CkBAIC0y
NTAyLDExICsyMjMzLDExIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICBjb25zdGV4cHIgR1BSUmVn
IG1ldGFkYXRhR1BSID0gcmVnVDQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJl
Z1QyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDM7CiAKICAgICB1aW50
MzJfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zm
c2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChz
Y29wZSwgc2NvcGVHUFIpOwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWV0YWRhdGFPZmZzZXQp
LCBzX21ldGFkYXRhR1BSLCBtZXRhZGF0YUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIoYnl0
ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKQEAgLTI1MjksNyArMjI2MCw3IEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyYXRlT3BH
ZXRGcm9tU2NvcGVUaHVuazxHbG9iYWxWYXI+KTsKIAogICAgIGVtaXROYWtlZE5lYXJDYWxsKGNv
ZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlSlNSKTsK
IH0KIAogdGVtcGxhdGUgPFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGU+CkBAIC0yNTQy
LDYgKzIyNzMsMTAgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6
OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYgdm0pCiAgICAgdXNpbmcgTWV0YWRhdGEg
PSBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE7CiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0
YUdQUiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMjsKKyAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDM7IC8vIFVzZWQgb25s
eSBvbiBzbG93IHBhdGgKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNTsK
KyAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZzZXRHUFIpOworICAgIHN0YXRpY19hc3NlcnQo
bm9PdmVybGFwKHJldHVyblZhbHVlSlNSLCBtZXRhZGF0YUdQUiwgc2NvcGVHUFIsIGJ5dGVjb2Rl
T2Zmc2V0R1BSLCBzY3JhdGNoR1BSKSk7CiAKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCkBAIC0y
NTUyLDEwICsyMjg3LDEwIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtKQogICAgIGF1dG8gZG9WYXJJ
bmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewogICAg
ICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHJlZ1QzKTsKLSAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpv
ZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICBqaXQubG9hZFB0cihBZGRy
ZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9u
V2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNo
OChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwg
VHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIGppdC5sb2FkUHRyKGFkZHJl
c3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9i
amVjdCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Moc2NyYXRj
aEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldhdGNo
cG9pbnQpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNo
OChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRl
KCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAgICB9OwogICAgIAogICAgIGF1
dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CkBAIC0yNTYzLDI5
ICsyMjk4LDI4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpn
ZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtKQogICAgICAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czogewogICAgICAgICAgICAgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9u
IHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xv
YmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBm
b3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1l
dGFkYXRhR1BSLCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCkp
LCByZWdUMSk7Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaFRlc3RQdHIo
WmVybywgcmVnVDEpKTsKLSAgICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3Ry
dWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhzY29wZUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZT
dHJ1Y3R1cmUoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGpp
dC5icmFuY2hUZXN0UHRyKFplcm8sIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIGppdC5sb2Fk
MzIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90
RXF1YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpKTsKIAogICAgICAgICAgICAgaml0LmppdEFzc2VydChzY29wZWRMYW1iZGE8SnVt
cCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxP
YmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gaml0LmJyYW5jaFB0cihF
cXVhbCwgc2NvcGVHUFIsIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgQ29kZUJsb2NrOjpvZmZzZXRP
Zkdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpp
dC5icmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIH0p
KTsKIAotICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRh
dGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDEpOworICAgICAgICAgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgc2NyYXRj
aEdQUik7CiAKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAg
ICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBqaXQuYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBy
ZWdUMSwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAgICAgICAg
ICAgSnVtcCBpc091dE9mTGluZSA9IGppdC5icmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHNj
cmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwogICAgICAgICAg
ICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwogICAg
ICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsoJmppdCk7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5uZWczMihyZWdUMSk7Ci0gICAg
ICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICAgICAgICAg
IGppdC5sb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVnVDApOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgc2NvcGVHUFIpOworICAgICAgICAgICAgaml0Lm5lZ1B0cihzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQmFzZUluZGV4KHNjb3BlR1BSLCBzY3JhdGNo
R1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpLCByZXR1cm5WYWx1ZUpTUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKQEAgLTI1OTMsMjAgKzIzMjcsMTYgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9t
U2NvcGVUaHVuayhWTSYgdm0pCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAg
ICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAg
ICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpKTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFk
YXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MocmVnVDApLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQWRkcmVzcyhzY3JhdGNoR1BSKSwgcmV0dXJuVmFs
dWVKU1IpOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIg
fHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
IC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5j
aElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJy
YW5jaElmRW1wdHkocmV0dXJuVmFsdWVKU1IpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6CiAgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KG1ldGFkYXRhR1BSLCAgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDMpOwotICAg
ICAgICAgICAgc3RhdGljX2Fzc2VydCgxIDw8IDMgPT0gc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAg
ICAgICAgICBqaXQubHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCByZWdUMyk7Ci0gICAgICAgICAg
ICBqaXQuYWRkUHRyKHNjb3BlR1BSLCByZWdUMyk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSks
IHJlZ1QwKTsKLQorICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwg
IE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
aml0LmxvYWRWYWx1ZShCYXNlSW5kZXgoc2NvcGVHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWlnaHQs
IEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmV0dXJuVmFsdWVK
U1IpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKICAgICAgICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKQEAgLTI2MjMsMTEgKzIzNTMsMTEgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRG
cm9tU2NvcGVUaHVuayhWTSYgdm0pCiAgICAgICAgIGVtaXRDb2RlKHByb2ZpbGVkUmVzb2x2ZVR5
cGUpOwogICAgIGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGpp
dC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5m
bygpKSwgcmVnVDApOwotICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86
OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAgICAg
aml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJ
bmZvKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0LmFuZDMyKFRydXN0ZWRJbW0zMihHZXRQ
dXRJbmZvOjp0eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8g
c2NyYXRjaEdQUgogCiAgICAgICAgIGF1dG8gZW1pdENhc2VXaXRob3V0Q2hlY2sgPSBbJl0gKFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlKSB7Ci0gICAgICAgICAgICBKdW1wIG5vdENhc2UgPSBqaXQu
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKKyAg
ICAgICAgICAgIEp1bXAgbm90Q2FzZSA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaEdQ
UiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBlbWl0Q29kZShyZXNv
bHZlVHlwZSk7CiAgICAgICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOwogICAg
ICAgICAgICAgbm90Q2FzZS5saW5rKCZqaXQpOwpAQCAtMjY2MSw4ICsyMzkxLDcgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2Nv
cGVUaHVuayhWTSYgdm0pCiAgICAgfQogCiAgICAgc3RhdGljX2Fzc2VydChWYWx1ZVByb2ZpbGU6
Om51bWJlck9mQnVja2V0cyA9PSAxKTsKLSAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyht
ZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpICsgVmFsdWVQcm9maWxlOjpv
ZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKLQorICAgIGppdC5zdG9yZVZhbHVlKHJldHVyblZhbHVl
SlNSLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkgKyBW
YWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogICAgIGppdC5yZXQoKTsKIAog
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OlRodW5rKTsKQEAgLTI2ODAsNDkgKzI0MDksNjYgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5l
cmF0b3IoVk0mIHYKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJz
OjplYnApOwotI2VsaWYgQ1BVKEFSTTY0KQorI2VsaWYgQ1BVKEFSTTY0KSB8fCBDUFUoQVJNX1RI
VU1CMikKICAgICBqaXQucHVzaFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rl
cik7CisjZWxpZiBDUFUoTUlQUykKKyAgICBqaXQucHVzaFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0
ZXIsIHJldHVybkFkZHJlc3NSZWdpc3Rlcik7CisjZWxzZQorIyAgIGVycm9yICJOb3QgaW1wbGVt
ZW50ZWQgb24gcGxhdGZvcm0iCiAjZW5kaWYKIAogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BHZXRG
cm9tU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSBy
ZWdUNDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIgPSBy
ZWdUNTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIgPSBy
ZWdUMzsKICAgICBqaXQuc3RvcmUzMihpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKIAotICAgIGNvbnN0
ZXhwciBHUFJSZWcgY29kZUJsb2NrR1BSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2Jq
ZWN0R1BSID0gYXJndW1lbnRHUFIwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgaW5zdHJ1Y3Rpb25H
UFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgc3RhdGljX2Fzc2VydChpbmNvbWluZ0J5dGVjb2RlT2Zm
c2V0R1BSICE9IGNvZGVCbG9ja0dQUik7Ci0gICAgc3RhdGljX2Fzc2VydChpbmNvbWluZ0J5dGVj
b2RlT2Zmc2V0R1BSICE9IGdsb2JhbE9iamVjdEdQUik7Ci0gICAgc3RhdGljX2Fzc2VydChpbmNv
bWluZ0J5dGVjb2RlT2Zmc2V0R1BSICE9IGluc3RydWN0aW9uR1BSKTsKLSAgICBzdGF0aWNfYXNz
ZXJ0KG1ldGFkYXRhR1BSICE9IGNvZGVCbG9ja0dQUik7Ci0gICAgc3RhdGljX2Fzc2VydChtZXRh
ZGF0YUdQUiAhPSBnbG9iYWxPYmplY3RHUFIpOwotICAgIHN0YXRpY19hc3NlcnQobWV0YWRhdGFH
UFIgIT0gaW5zdHJ1Y3Rpb25HUFIpOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKG1ldGFk
YXRhR1BSLCBpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSLCBzY3JhdGNoR1BSLCBnbG9iYWxPYmpl
Y3RHUFIsIGluc3RydWN0aW9uR1BSKSk7CiAKLSAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7Ci0gICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSks
IGdsb2JhbE9iamVjdEdQUik7Ci0gICAgaml0LmxvYWRQdHIoQWRkcmVzcyhjb2RlQmxvY2tHUFIs
IENvZGVCbG9jazo6b2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBpbnN0cnVjdGlv
bkdQUik7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCBzY3JhdGNoR1BSKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mSW5zdHJ1
Y3Rpb25zUmF3UG9pbnRlcigpKSwgaW5zdHJ1Y3Rpb25HUFIpOwogICAgIGppdC5hZGRQdHIoaW5j
b21pbmdCeXRlY29kZU9mZnNldEdQUiwgaW5zdHJ1Y3Rpb25HUFIpOwogCi0gICAgQVNTRVJUKFJl
Z2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkuY29udGFpbnMoR1BSSW5mbzo6bnVtYmVy
VGFnUmVnaXN0ZXIpKTsKLSAgICBqaXQubW92ZShtZXRhZGF0YUdQUiwgR1BSSW5mbzo6bnVtYmVy
VGFnUmVnaXN0ZXIpOyAvLyBQcmVzZXJ2ZSBtZXRhZGF0YSBpbiBhIGNhbGxlZSBzYXZlZCByZWdp
c3Rlci4KKyAgICAvLyBQcmVzZXJ2ZSBtZXRhZGF0YSBpbiBhIGNhbGxlZSBzYXZlZCByZWdpc3Rl
ci4KKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFDU1Ig
PSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKKyAgICBhdXRvIHJlc3RvcmVIaWphY2tlZENT
UiA9IFsmXSgpIHsKKyAgICAgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJl
clRhZyksIEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKTsKKyAgICB9OworI2VsaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhQ1NSID0gc19tZXRhZGF0
YUdQUjsKKyAgICBhdXRvIHJlc3RvcmVIaWphY2tlZENTUiA9IFsmXSgpIHsKKyAgICAgICAgaml0
LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBzX21ldGFkYXRh
R1BSKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBDb2RlQmxv
Y2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgc19tZXRhZGF0YUdQUik7CisgICAgfTsKKyNl
bmRpZgorICAgIEFTU0VSVChSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpLmNvbnRh
aW5zKG1ldGFkYXRhQ1NSKSk7CisgICAgaml0Lm1vdmUobWV0YWRhdGFHUFIsIG1ldGFkYXRhQ1NS
KTsKKwogICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25HZXRGcm9tU2Nv
cGUpPihnbG9iYWxPYmplY3RHUFIsIGluc3RydWN0aW9uR1BSKTsKICAgICBqaXQucHJlcGFyZUNh
bGxPcGVyYXRpb24odm0pOwogICAgIENhbGwgb3BlcmF0aW9uID0gaml0LmNhbGwoT3BlcmF0aW9u
UHRyVGFnKTsKICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gaml0LmVtaXROb25QYXRjaGFibGVF
eGNlcHRpb25DaGVjayh2bSk7CiAKLSAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhHUFJJ
bmZvOjpudW1iZXJUYWdSZWdpc3RlciwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpICsgVmFs
dWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKLSAgICBqaXQubW92ZShUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpOwor
ICAgIGppdC5zdG9yZVZhbHVlKHJldHVyblZhbHVlSlNSLCBBZGRyZXNzKG1ldGFkYXRhQ1NSLCBN
ZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RC
dWNrZXQoKSkpOworICAgIHJlc3RvcmVIaWphY2tlZENTUigpOwogCiAjaWYgQ1BVKFg4Nl82NCkK
ICAgICBqaXQucG9wKFg4NlJlZ2lzdGVyczo6ZWJwKTsKLSNlbGlmIENQVShBUk02NCkKKyNlbGlm
IENQVShBUk02NCkgfHwgQ1BVKEFSTV9USFVNQjIpCiAgICAgaml0LnBvcFBhaXIoZnJhbWVQb2lu
dGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisjZWxpZiBDUFUoTUlQUykKKyAgICBqaXQucG9w
UGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgcmV0dXJuQWRkcmVzc1JlZ2lzdGVyKTsKKyNlbHNl
CisjICAgZXJyb3IgIk5vdCBpbXBsZW1lbnRlZCBvbiBwbGF0Zm9ybSIKICNlbmRpZgogICAgIGpp
dC5yZXQoKTsKIAogICAgIGV4Y2VwdGlvbkNoZWNrLmxpbmsoJmppdCk7Ci0gICAgaml0Lm1vdmUo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyksIEdQUkluZm86Om51bWJlclRhZ1JlZ2lz
dGVyKTsKKyAgICByZXN0b3JlSGlqYWNrZWRDU1IoKTsKICAgICBKdW1wIGp1bXBUb0hhbmRsZXIg
PSBqaXQuanVtcCgpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CkBAIC0yNzMxLDcg
KzI0NzcsNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xv
d19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYgdgogICAgIHBhdGNoQnVmZmVyLmxpbmso
anVtcFRvSGFuZGxlciwgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1
bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9nZXRfZnJvbV9zY29wZSIpOwogfQotI2VuZGlm
IC8vICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CkBAIC0yNzQ3
LDIzICsyNDkyLDI4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gU3RydWN0dXJlIGNoZWNr
IGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9y
IGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LgogICAgICAgICAgICAgLy8gQWRkaXRpb25h
bGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9u
LgotICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3Bl
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgcmVnVDEpOwotICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAgICAgICAgICAgbG9hZDMyKEFkZHJl
c3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworICAgICAgICAgICAgY29uc3RleHBy
IEpTVmFsdWVSZWdzIHZhbHVlSlNSID0ganNSZWdUMTA7CisgICAgICAgICAgICBjb25zdGV4cHIg
R1BSUmVnIHNjb3BlR1BSID0gcmVnVDI7CisgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNj
cmF0Y2hHUFIxID0gcmVnVDM7CisgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hH
UFIyID0gcmVnVDQ7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcCh2YWx1ZUpT
Uiwgc2NvcGVHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMikpOworICAgICAgICAgICAgbG9h
ZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZTdHJ1Y3R1cmUoKSwgc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlclBheWxvYWQoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGJyYW5jaFRlc3RQdHIoWmVybywgc2NyYXRjaEdQUjEpKTsKKyAgICAgICAgICAgIGxvYWQzMihB
ZGRyZXNzKHNjcmF0Y2hHUFIxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSMSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRk
cmVzcyhzY29wZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUjEp
KTsKIAotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwor
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVKU1IpOwogCiAg
ICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBK
dW1wIHsKLSAgICAgICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDMpOworICAgICAgICAg
ICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgIHJl
dHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBzY3JhdGNoR1BSMik7CiAgICAgICAgICAg
ICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJl
Z1QxKTsKLSAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihy
ZWdUMiwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0
Y2hHUFIyKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0
VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCBzY3JhdGNoR1BSMSk7CisgICAg
ICAgICAgICBuZWdQdHIoc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgc3RvcmVWYWx1ZSh2YWx1
ZUpTUiwgQmFzZUluZGV4KHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMSwgVGltZXNFaWdodCwgKGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiAgICAg
ICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI3NzEsMjIgKzI1MjEsMjMgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
czoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7
Ci0gICAgICAgICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSwgcmVnVDApOwor
ICAgICAgICAgICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAoanNSZWdUMTAsIHJlZ1QyLCByZWdU
MykpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDIpOworICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5
Q2hlY2socmVzb2x2ZVR5cGUsIHJlZ1QyKTsKIAotICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCks
IHJlZ1QwKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0
VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMik7CiAKICAgICAgICAg
ICAgIGlmICghaXNJbml0aWFsaXphdGlvbihieXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6
YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29s
dmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewogICAg
ICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdl
IGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5
LgotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCksIHJlZ1QxKTsKLSAgICAg
ICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QxKSk7CisgICAgICAgICAg
ICAgICAgbG9hZFZhbHVlKEFkZHJlc3MocmVnVDIpLCBqc1JlZ1QxMCk7CisgICAgICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShqc1JlZ1QxMCkpOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6
Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDEpOwotICAgICAgICAgICAg
ZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMSk7CisgICAgICAgICAgICBsb2FkUHRyRnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNo
cG9pbnRTZXQoKSwgcmVnVDMpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2lu
dChyZWdUMyk7CiAKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QxKTsKLSAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDApKTsKKyAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGpzUmVnVDEwKTsKKyAgICAgICAg
ICAgIHN0b3JlVmFsdWUoanNSZWdUMTAsIEFkZHJlc3MocmVnVDIpKTsKIAogICAgICAgICAgICAg
ZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMjc5NCwxNCArMjU0NSwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAg
ICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAg
ICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKGpzUmVnVDEw
LCByZWdUMiwgcmVnVDMpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QzKTsKIAotICAgICAgICAgICAg
bG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QwKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2lu
dFNldCgpLCByZWdUMyk7CiAgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDIpOwotICAg
ICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMCk7Ci0gICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgICAgICAgICBzdG9yZTY0KHJlZ1Qx
LCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBKU0xleGljYWxFbnZpcm9ubWVu
dDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSkpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0
Y2hwb2ludChyZWdUMyk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCBqc1JlZ1QxMCk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChz
Y29wZSwgcmVnVDMpOworICAgICAgICAgICAgc3RvcmVWYWx1ZShqc1JlZ1QxMCwgQmFzZUluZGV4
KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9m
VmFyaWFibGVzKCkpKTsKIAogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjk0OCwxMCAr
MjcwMCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1l
bnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9p
bmRleDsKICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDAp
OwotICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZz
ZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZWdUMCk7Ci0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChh
cmd1bWVudHMsIHJlZ1QwKTsKKyAgICBsb2FkVmFsdWUoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJn
dW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSwganNSZWdUMTApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yOTYwLDUxICsyNzEyLDE1IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVu
dHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDEpOwotICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3Vt
ZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSkpOworCisgICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAocmVnVDIsIGpzUmVnVDEwKSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYXJndW1lbnRzLCByZWdUMik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwganNSZWdUMTApOworICAgIHN0b3JlVmFs
dWUoanNSZWdUMTAsIEFkZHJlc3MocmVnVDIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNl
dCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwogCiAgICAgZW1p
dFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCi17Ci0gICAgLy8gdmFsdWUg
bWF5IGJlIGludmFsaWQgVmlydHVhbFJlZ2lzdGVyIGlmIG1vZGUgaXMgVW5jb25kaXRpb25hbFdy
aXRlQmFycmllciBvciBTaG91bGRGaWx0ZXJCYXNlLgotICAgIEp1bXAgdmFsdWVOb3RDZWxsOwot
ICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVy
QmFzZUFuZFZhbHVlKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAg
ICB9Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVnVDApOwotICAg
IEp1bXAgb3duZXJOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRW
YWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCi0gICAgICAgIG93bmVyTm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJ
bkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIHJlZ1QwLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgp
LCByZWdUMCk7Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwotCi0g
ICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxk
RmlsdGVyQmFzZSkKLSAgICAgICAgb3duZXJOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgaWYgKG1v
ZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFs
dWUpIAotICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0
ZUJhcnJpZXJNb2RlIG1vZGUpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwotICAgIEp1bXAgdmFsdWVOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZp
bHRlclZhbHVlKQotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OwotCi0gICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7Ci0KLSAgICBpZiAobW9kZSA9PSBTaG91
bGRGaWx0ZXJWYWx1ZSkgCi0gICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwotfQotCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7CkBAIC0zMDEyLDExICsyNzI4LDExIEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5k
ZXgpKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJhc2UsIHJl
Z1QwKTsKKyAgICBsb2FkVmFsdWUoQWRkcmVzcyhyZWdUMCwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0
SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwganNSZWdUMTApOwogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBq
c1JlZ1QxMCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGpzUmVnVDEwKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zMDI2LDEyICsyNzQyLDE1IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAg
ICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0ludGVybmFs
RmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChyZWdUMiwganNSZWdUMTApKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyUGF5bG9hZChiYXNlLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwganNSZWdUMTApOworICAgIHN0b3JlVmFsdWUoanNSZWdUMTAsIEFkZHJlc3Mo
cmVnVDIsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxk
KGluZGV4KSkpOwogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRl
clZhbHVlKTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCisKIHZvaWQgSklUOjplbWl0X29wX2dl
dF9wcm9wZXJ0eV9lbnVtZXJhdG9yKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQ
cm9wZXJ0eUVudW1lcmF0b3I+KCk7CkBAIC0zMjY4LDE4ICsyOTg3LDk2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0CiAgICAgZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY3VycmVu
dEluc3RydWN0aW9uLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckhhc093blBy
b3BlcnR5PigpLCBzbG93X3BhdGhfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KTsKIH0KIAot
I2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisKK3ZvaWQg
SklUOjplbWl0X29wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0
aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRfcHJvcGVydHlfZW51bWVyYXRv
cik7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51
bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dfcGF0aF9lbnVtZXJhdG9yX25leHQpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9
CisKK3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0
aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW51bWVyYXRvcl9nZXRf
YnlfdmFsKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JN
KCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNs
b3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJhdG9y
X2luX2J5X3ZhbCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlz
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVy
dHkpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKKyNlbmRpZgorCisjaWYgVVNFKEpT
VkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93
bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKICAg
ICAvLyB2YWx1ZSBtYXkgYmUgaW52YWxpZCBWaXJ0dWFsUmVnaXN0ZXIgaWYgbW9kZSBpcyBVbmNv
bmRpdGlvbmFsV3JpdGVCYXJyaWVyIG9yIFNob3VsZEZpbHRlckJhc2UuCiAgICAgSnVtcCB2YWx1
ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBT
aG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKLSAgICAgICAgZW1pdExvYWRUYWcodmFsdWUsIHJl
Z1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAg
ICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwogICAgIH0KLSAgICAK
LSAgICBlbWl0TG9hZChvd25lciwgcmVnVDAsIHJlZ1QxKTsKKworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsKKyAgICBKdW1wIG93bmVyTm90Q2VsbDsKKyAgICBpZiAo
bW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJC
YXNlKQorICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisg
ICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCBy
ZWdUMCwgcmVnVDEpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgcmVnVDApOworICAgIG93bmVySXNSZW1lbWJl
cmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJh
c2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCisgICAgICAgIG93bmVyTm90
Q2VsbC5saW5rKHRoaXMpOworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1v
ZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKQorICAgICAgICB2YWx1ZU5vdENlbGwubGlu
ayh0aGlzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIEp1bXAgdmFsdWVOb3RDZWxs
OworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKQorICAgICAgICB2YWx1ZU5vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgZW1pdFdyaXRlQmFycmllcihvd25l
cik7CisKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKKyAgICAgICAgdmFsdWVO
b3RDZWxsLmxpbmsodGhpcyk7Cit9CisKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisKK3ZvaWQg
SklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit7CisgICAgLy8gdmFsdWUgbWF5IGJl
IGludmFsaWQgVmlydHVhbFJlZ2lzdGVyIGlmIG1vZGUgaXMgVW5jb25kaXRpb25hbFdyaXRlQmFy
cmllciBvciBTaG91bGRGaWx0ZXJCYXNlLgorICAgIEp1bXAgdmFsdWVOb3RDZWxsOworICAgIGlm
IChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFu
ZFZhbHVlKSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIHJlZ1Qw
KTsKKyAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICB9
CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCwgcmVnVDEpOwogICAg
IEp1bXAgb3duZXJOb3RDZWxsOwogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2UgfHwg
bW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpCiAgICAgICAgIG93bmVyTm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CkBAIC0zMjkwLDcgKzMwODcsNyBAQCB2b2lkIEpJVDo6
ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSwgV3JpdGVCYQogCiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSB8fCBtb2Rl
ID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkKICAgICAgICAgb3duZXJOb3RDZWxsLmxpbmso
dGhpcyk7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91
bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIAorICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVl
IHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKQogICAgICAgICB2YWx1ZU5vdENl
bGwubGluayh0aGlzKTsKIH0KIApAQCAtMzI5OCwxNyArMzA5NSwxNyBAQCB2b2lkIEpJVDo6ZW1p
dFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRl
QmFycmllck1vZAogewogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmIChtb2RlID09IFNo
b3VsZEZpbHRlclZhbHVlKSB7Ci0gICAgICAgIGVtaXRMb2FkVGFnKHZhbHVlLCByZWdUMCk7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIHJlZ1QwKTsKICAgICAgICAg
dmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICB9CiAKICAgICBlbWl0
V3JpdGVCYXJyaWVyKG93bmVyKTsKIAotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVl
KSAKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKICAgICAgICAgdmFsdWVOb3RD
ZWxsLmxpbmsodGhpcyk7CiB9CiAKLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQorI2VuZGlmCiAK
IHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgV3JpdGVC
YXJyaWVyTW9kZSBtb2RlKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGM2MGI2MzJlOTRkMWRlZjJmNDIzMGYwYTg0YmU4MzZjZmQ3MzUyYTEuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY0OCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKEpJVCkKLSNpZiBVU0UoSlNWQUxVRTMy
XzY0KQotI2luY2x1ZGUgIkpJVC5oIgotCi0jaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklu
bGluZXMuaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJEaXJlY3RBcmd1bWVu
dHMuaCIKLSNpbmNsdWRlICJHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCIKLSNpbmNsdWRlICJJbnRl
cnByZXRlcklubGluZXMuaCIKLSNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNB
cnJheS5oIgotI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJKU0xleGljYWxFbnZp
cm9ubWVudC5oIgotI2luY2x1ZGUgIkpTUHJvbWlzZS5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIu
aCIKLSNpbmNsdWRlICJPcGNvZGVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiUmVzdWx0VHlwZS5oIgot
I2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgi
Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+Ci0KLQotbmFtZXNwYWNlIEpTQyB7
Ci0gICAgCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7Ci0gICAgaW50IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGdldHRlciA9IGJ5dGVjb2RlLm1fYWNjZXNzb3I7Ci0KLSAgICBlbWl0TG9h
ZFBheWxvYWQoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRMb2FkUGF5bG9hZChnZXR0ZXIsIHJlZ1Qz
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgbV9wcm9maWxlZENvZGVCbG9jay0+aWRl
bnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dFNldHRlckJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBpbnQg
b3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2V0
dGVyID0gYnl0ZWNvZGUubV9hY2Nlc3NvcjsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCBy
ZWdUMSk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKHNldHRlciwgcmVnVDMpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIHJlZ1QxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5
KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dl
dHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
LXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRl
clNldHRlckJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jh
c2U7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBpbnQgYXR0
cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZ2V0
dGVyID0gYnl0ZWNvZGUubV9nZXR0ZXI7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNldHRlciA9IGJ5
dGVjb2RlLm1fc2V0dGVyOwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKLSAg
ICBlbWl0TG9hZFBheWxvYWQoZ2V0dGVyLCByZWdUMyk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKHNl
dHRlciwgcmVnVDQpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVy
LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fcHJvZmlsZWRD
b2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlcywgcmVnVDMs
IHJlZ1Q0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5VmFsPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9w
ZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0
ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIFZpcnR1YWxSZWdpc3RlciBnZXR0ZXIgPSBieXRlY29k
ZS5tX2FjY2Vzc29yOwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QyKTsKLSAgICBl
bWl0TG9hZChwcm9wZXJ0eSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZFBheWxvYWQoZ2V0
dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwg
bV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCBhdHRyaWJ1dGVzLCByZWdUMyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29w
X3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Ci17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0
ZXJCeVZhbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAg
IGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgc2V0dGVyID0gYnl0ZWNvZGUubV9hY2Nlc3NvcjsKLQotICAgIGVtaXRMb2FkUGF5
bG9hZChiYXNlLCByZWdUMik7Ci0gICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QxLCByZWdUMCk7
Ci0gICAgZW1pdExvYWRQYXlsb2FkKHNldHRlciwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgYXR0cmlidXRlcywgcmVnVDMp
OwotfQotCi12b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBkc3Qs
IFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5z
aWduZWQgZGVwdGgpCi17Ci0gICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzLCByZWdUMCk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZyksIHJlZ1QxKTsKLSAgICBlbWl0TG9hZFBheWxvYWQoc2NvcGUsIHJlZ1QwKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKLSAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmUo
ZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7Ci0gICAgdW5zaWduZWQgZGVwdGggPSBtZXRhZGF0
YS5tX2xvY2FsU2NvcGVEZXB0aDsKLQotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICAg
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUg
PSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX3Byb2Zp
bGVkQ29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUp
OwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5t
X2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9wcm9maWxlZENvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSks
IHJlZ1QxKSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSwgcmVnVDEpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUp
LCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEdsb2JhbFZhcjoKLSAg
ICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiAKLSAgICAgICAgY2Fz
ZSBHbG9iYWxMZXhpY2FsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0g
SlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9wcm9maWxl
ZENvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsK
LSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkNlbGxUYWcpLCByZWdUMSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Y29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1Qx
LCByZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENs
b3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
Ci0gICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUoZHN0LCBzY29wZSwgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkZXB0aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpDZWxsVGFnKSwgcmVnVDEpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1l
dGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOwotICAgICAgICAgICAg
ZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgotICAgICAgICBj
YXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgfQotICAgIH07Ci0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewot
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBs
b2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5v
dEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
cmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGlu
ayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxM
ZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBz
a2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDAp
OwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBlbWl0Q29kZShH
bG9iYWxQcm9wZXJ0eSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAg
ICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAg
ICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhp
Y2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAgICAgICAg
c2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxp
bmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25z
LmxpbmsodGhpcyk7Ci0KLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICAgICAgc2tp
cFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
fQotCi12b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVy
IHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQotewotICAgIGVtaXRMb2FkKHNjb3Bl
LCByZWdUMSwgcmVnVDApOwotICAgIGxvYWRQdHIoc3RydWN0dXJlU2xvdCwgcmVnVDIpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRHZXRWYXJG
cm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9hZCkK
LXsKLSAgICB1aW50cHRyX3QgcmF3QWRkcmVzcyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG9w
ZXJhbmQpOwotICAgIGxvYWQzMihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHJhd0FkZHJlc3MgKyBUYWdP
ZmZzZXQpLCB0YWcpOwotICAgIGxvYWQzMihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHJhd0FkZHJlc3Mg
KyBQYXlsb2FkT2Zmc2V0KSwgcGF5bG9hZCk7Ci19Ci12b2lkIEpJVDo6ZW1pdEdldFZhckZyb21J
bmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyB0YWcsIEdQUlJlZyBwYXls
b2FkKQotewotICAgIGxvYWRQdHIob3BlcmFuZCwgcGF5bG9hZCk7Ci0gICAgbG9hZDMyKEFkZHJl
c3MocGF5bG9hZCwgVGFnT2Zmc2V0KSwgdGFnKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhwYXlsb2Fk
LCBQYXlsb2FkT2Zmc2V0KSwgcGF5bG9hZCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0R2V0Q2xvc3Vy
ZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQotewotICAgIGVt
aXRMb2FkKHNjb3BlLCByZWdUMSwgcmVnVDApOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBK
U0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXpl
b2YoUmVnaXN0ZXIpICsgVGFnT2Zmc2V0KSwgcmVnVDEpOwotICAgIGxvYWQzMihBZGRyZXNzKHJl
Z1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQg
KiBzaXplb2YoUmVnaXN0ZXIpICsgUGF5bG9hZE9mZnNldCksIHJlZ1QwKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRDb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwot
ICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29s
dmVUeXBlKCk7Ci0gICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3Ry
dWN0dXJlLnNsb3QoKTsKLSAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKLSAgICAKLSAgICBhdXRvIGVt
aXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRG
b3JPcGVyYW5kKSB7Ci0gICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNj
b3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0
aW9uLgotICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWdUMjsKLSAgICAgICAgICAgIEdQUlJl
ZyByZXN1bHRUYWcgPSByZWdUMTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkID0g
cmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgb2Zmc2V0ID0gcmVnVDM7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIG1vdmUocmVnVDAsIGJhc2UpOwotICAgICAgICAgICAgbG9hZDMyKG9wZXJh
bmRTbG90LCBvZmZzZXQpOwotICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAg
ICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVh
bCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKLSAgICAgICAg
ICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwotICAgICAg
ICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
YmFzZSk7Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDMyKEJh
c2VJbmRleChiYXNlLCBvZmZzZXQsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy5wYXlsb2FkKSArIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdFBheWxvYWQpOwotICAgICAgICAgICAgbG9hZDMyKEJh
c2VJbmRleChiYXNlLCBvZmZzZXQsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy50YWcpICsgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKSwgcmVzdWx0VGFnKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKLSAgICAgICAg
Y2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAg
ICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxK
U1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFs
dWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMSwgcmVnVDApOwotICAgICAgICAgICAgaWYgKHJlc29s
dmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QxKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1p
dEdldENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgY2Fz
ZSBSZXNvbHZlZENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5Ogot
ICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAg
fTsKLQotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5
OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAg
ICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1
dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5
cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBK
dW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFs
c2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNOb3RH
bG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQubGlu
ayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
ewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEu
bV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJ
bmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAg
ICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGlzR2xv
YmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHks
IGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVt
cCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2Fs
VmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBu
b3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAg
ICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1
ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5
cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwotICAgIGVtaXRTdG9y
ZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJv
bV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZy
b21TY29wZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRGcm9tU2Nv
cGUsIGRzdCwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0
cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSog
b3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0g
ICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNl
dCk7Ci0gICAgdWludHB0cl90IHJhd0FkZHJlc3MgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihv
cGVyYW5kKTsKLSAgICBzdG9yZTMyKHJlZ1QxLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHJhd0FkZHJl
c3MgKyBUYWdPZmZzZXQpKTsKLSAgICBzdG9yZTMyKHJlZ1QwLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+
KHJhd0FkZHJlc3MgKyBQYXlsb2FkT2Zmc2V0KSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0R2xv
YmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQotewot
ICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJlY3RX
YXRjaHBvaW50U2V0LCByZWdUMik7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKCppbmRpcmVjdFdhdGNo
cG9pbnRTZXQpOyAvLyBGSVhNRTogPz8KLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJl
Z1QyKTsKLSAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBUYWdPZmZzZXQpKTsKLSAg
ICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QyLCBQYXlsb2FkT2Zmc2V0KSk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJf
dCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsK
LSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBlbWl0TG9hZChzY29wZSwg
cmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZTMyKHJl
Z1QzLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJs
ZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpICsgVGFnT2Zmc2V0KSk7Ci0gICAgc3Rv
cmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9m
VmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQp
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNj
b3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mbzsKLSAgICBSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBz
dHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJf
dCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5t
X29wZXJhbmQpOwotICAgIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKLSAgICAgICAgc3dpdGNo
IChyZXNvbHZlVHlwZSkgewotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgICAgICBj
YXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAg
ZW1pdFdyaXRlQmFycmllcihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVy
ZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2
YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QzLCByZWdUMik7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZFB0cihvcGVy
YW5kU2xvdCwgcmVnVDEpOwotICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAg
IHN0b3JlMzIocmVnVDMsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJz
dE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgICAgICAg
ICAgc3RvcmUzMihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHbG9iYWxWYXI6Ci0gICAg
ICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgY2FzZSBH
bG9iYWxMZXhpY2FsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNT
Y29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9wcm9maWxlZENv
ZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAg
ICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRWYXJS
ZWFkT25seUNoZWNrKHJlc29sdmVUeXBlLCByZWdUMCk7Ci0gICAgICAgICAgICBpZiAoIWlzSW5p
dGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVU
eXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0
byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5l
ZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCi0gICAgICAgICAgICAgICAgaWYgKGlu
ZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9t
SW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVn
VDEsIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVt
aXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCks
IHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0
eShyZWdUMSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZv
ck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3Qo
Yml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFkYXRhLm1f
d2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdFB1
dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFs
dWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9z
dXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgot
ICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZh
bHVlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJl
VmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICBj
YXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgICAgICBjYXNl
IFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHN3
aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0
IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1Qw
KTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVn
VDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlw
ZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZh
cikpOwotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4gaGFw
cGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXplZCBj
b25zdCBiaW5kaW5nLgotCi0gICAgICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwot
ICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIs
IHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNH
bG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwg
ZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9F
bmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAg
ICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8g
TG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5
ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsK
LSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAg
ICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5k
LmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwot
ICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhp
cyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25z
LmxpbmsodGhpcyk7Ci0KLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLQotICAgICAgICBz
a2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVs
dDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2Rl
QmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBNb2R1bGVWYXIpIHsKLSAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlz
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF90aHJvd19zdHJpY3RfbW9kZV9yZWFkb25s
eV9wcm9wZXJ0eV93cml0ZV9lcnJvcik7Ci0gICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgbV9w
cm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19
Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50cz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5
dGVjb2RlLm1fYXJndW1lbnRzOwotICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0K
LSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsK
LSAgICAKLSAgICBlbWl0TG9hZFBheWxvYWQoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgbG9hZDMy
KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXgg
KiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIFRhZ09mZnNldCksIHJlc3VsdFJlZ3Mu
dGFnR1BSKCkpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0
b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBQ
YXlsb2FkT2Zmc2V0KSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRTdG9yZShkc3QsIHJl
c3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0VG9Bcmd1bWVudHM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5
dGVjb2RlLm1fYXJndW1lbnRzOwotICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAKLSAgICBl
bWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKLSAg
ICAKLSAgICBlbWl0TG9hZFBheWxvYWQoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgZW1pdExvYWQo
dmFsdWUsIHJlZ1QxLCByZWdUMik7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMCwg
RGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pICsgVGFnT2Zmc2V0KSk7Ci0gICAgc3RvcmUzMihyZWdUMiwgQWRkcmVz
cyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgUGF5bG9hZE9mZnNldCkpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEludGVybmFsRmllbGQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwot
ICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLQotICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotCi0gICAgZW1pdExvYWRQ
YXlsb2FkKGJhc2UsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMiwgSlNJbnRlcm5h
bEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpICsgVGFnT2Zm
c2V0KSwgcmVzdWx0UmVncy50YWdHUFIoKSk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDIsIEpT
SW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSAr
IFBheWxvYWRPZmZzZXQpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Ci0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFN0b3JlKGRzdCwg
cmVzdWx0UmVncy50YWdHUFIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotfQotCi12b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEludGVybmFsRmllbGQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZTsKLSAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0KLSAgICBlbWl0
TG9hZFBheWxvYWQoYmFzZSwgcmVnVDApOwotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVn
VDIpOwotICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTSW50ZXJuYWxGaWVsZE9i
amVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSArIFRhZ09mZnNldCkpOwot
ICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIEpTSW50ZXJuYWxGaWVsZE9iamVjdElt
cGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSArIFBheWxvYWRPZmZzZXQpKTsKLSAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0X29wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRo
Q2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRfcHJvcGVydHlfZW51
bWVyYXRvcik7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRf
b3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Ci17Ci0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJhdG9yX25leHQpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxs
KCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIEpJVFNsb3dQYXRoQ2FsbCBz
bG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW51bWVyYXRv
cl9nZXRfYnlfdmFsKTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotfQotCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpCi17Ci0gICAgVU5SRUFDSEFCTEVfRk9SX1BM
QVRGT1JNKCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU2xvd1BhdGhD
YWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVt
ZXJhdG9yX2luX2J5X3ZhbCk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2Fs
bCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2hhc19vd25f
cHJvcGVydHkpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IEpTQwotCi0jZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKLSNlbmRpZiAvLyBFTkFCTEUoSklU
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCmluZGV4IDdjYTFi
NGU3YzNmZDA4NGRkMjdhYzM4NTA2YWE5YzZhZWQ5NWRlYjAuLmYxODZmYjgyYjFmZjk3OGQ4ZjY3
YTRmMDUzMzhlOWNmYjRjODIzNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSlNJbnRlcmZhY2VKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50
ZXJmYWNlSklULmgKQEAgLTM2LDcgKzM2LDcgQEAKICNpZiBFTkFCTEUoSklUKQogCiBuYW1lc3Bh
Y2UgSlNDIHsKLSAgICBjbGFzcyBKU0ludGVyZmFjZUpJVCA6IHB1YmxpYyBDQ2FsbEhlbHBlcnMs
IHB1YmxpYyBHUFJJbmZvLCBwdWJsaWMgRlBSSW5mbyB7CisgICAgY2xhc3MgSlNJbnRlcmZhY2VK
SVQgOiBwdWJsaWMgQ0NhbGxIZWxwZXJzLCBwdWJsaWMgR1BSSW5mbywgcHVibGljIEpTUkluZm8s
IHB1YmxpYyBGUFJJbmZvIHsKICAgICBwdWJsaWM6CiAKICAgICAgICAgSlNJbnRlcmZhY2VKSVQo
Vk0qIHZtID0gbnVsbHB0ciwgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCmluZGV4IDI5NzE0N2Ux
YzRjMDhkY2NkNWY3Yjc4NjQxMWQ4NTViMmExZGU0N2MuLmI4NDBlYzU4NTlkNjIwMDcxYjZkODhj
NDNiYjhlOThiNDcyOWUyY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
VGh1bmtHZW5lcmF0b3JzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5r
R2VuZXJhdG9ycy5jcHAKQEAgLTQxLDggKzQxLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSNp
ZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQogewogICAgIENDYWxs
SGVscGVycyBqaXQ7CkBAIC02MSw2ICs1OSw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKICAgICByZXR1cm4g
RklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJoYW5kbGVFeGNlcHRp
b24iKTsKIH0KIAorI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorCiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xs
YmFja0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKQEAgLTc3LDE0
ICs3NywyMCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4
Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja0dlbmVyYQogICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgImhhbmRsZUV4Y2VwdGlvbldpdGhDYWxs
RnJhbWVSb2xsYmFjayIpOwogfQogCisjZW5kaWYKKwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2Vu
ZXJhdG9yKFZNJiB2bSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4Nl82
NCkKICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDIgKiBzaXplb2Yo
Q1BVUmVnaXN0ZXIpKSwgWDg2UmVnaXN0ZXJzOjplc3ApOwotI2VsaWYgQ1BVKEFSTTY0KQorI2Vs
aWYgQ1BVKEFSTTY0KSB8fCBDUFUoQVJNX1RIVU1CMikKICAgICBqaXQucG9wUGFpcihDQ2FsbEhl
bHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rlcik7
CisjZWxpZiBDUFUoTUlQUykKKyAgICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1lUG9p
bnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnJldHVybkFkZHJlc3NSZWdpc3Rlcik7CisjZWxz
ZQorIyAgIGVycm9yICJOb3QgaW1wbGVtZW50ZWQgb24gcGxhdGZvcm0iCiAjZW5kaWYKIAogICAg
IENDYWxsSGVscGVyczo6SnVtcCBjb250aW51YXRpb24gPSBqaXQuanVtcCgpOwpAQCAtOTUsNiAr
MTAxLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVua1N0
YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2UKICAgICByZXR1cm4gRklOQUxJWkVfQ09E
RShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5k
SGFuZGxlRXhjZXB0aW9uIik7CiB9CiAKKyNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKKwog
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaGVja0V4Y2VwdGlvbkdlbmVy
YXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCmluZGV4IDBmOWY2ZTJkMzZmNmRkMjNlMTg3MjZh
Y2U2MzE0YTMwYTIwMWRiY2UuLjIyNzhlODA0Y2UwNTQ0YTdiZTVhNzhhN2U4M2ZmNWNhY2ZkZGM3
ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3Jz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaApAQCAt
MzcsMTIgKzM3LDEyIEBAIGNsYXNzIFZNOwogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9u
R2VuZXJhdG9yKFZNJik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhh
bmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja0dlbmVyYXRvcihWTSYpOwotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5k
SGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CiAKICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5k
bGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gcG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRv
cihWTSYpOwogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRocm93RXhj
ZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSYpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443662</attachid>
            <date>2021-11-09 01:58:25 -0800</date>
            <delta_ts>2021-11-10 07:11:36 -0800</delta_ts>
            <desc>patch without sharing actually enabled</desc>
            <filename>bug-232624-20211109095823.patch</filename>
            <type>text/plain</type>
            <size>223838</size>
            <attacher name="Geza Lore">glore</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NDg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
NjcyOWI4YWFhMWZiZjljYWM4NTBjMjY2MjkyODZhOGU2YzlkODRlLi45YjYwZjhmY2M1NzE3MWE3
ZjIwNDNmNDc2N2Q4YjNiODUxNjg4M2I0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODggQEAKKzIwMjEtMTEtMDkgIEdlemEgTG9yZSAgPGdsb3JlQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0pTQ10gRW5hYmxlIHNoYXJpbmcgb2YgdW5saW5rZWQgYmFzZWxpbmUgY29kZSBv
biBKU1ZBTFVFMzJfNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzMjYyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggY29udGFpbnMgYSBmZXcgZGlmZmVyZW50IGNoYW5nZXMsIHdoaWNo
IHRha2VuIHRvZ2V0aGVyCisgICAgICAgIGVuYWJsZSB0aGUgc2hhcmluZyBvZiB0aGUgdW5saW5r
ZWQgYmFzZWxpbmUgSklUIGNvZGUgYmV0d2VlbiBkaWZmZXJlbnQKKyAgICAgICAgQ29kZUJsb2Nr
cyBvbiBKU1ZBTFVFMzJfNjQgcGxhdGZvcm1zICh0aGUgc2FtZSB3YXkgYXMgdGhpcyBjb2RlIGlz
CisgICAgICAgIHNoYXJlZCBvbiBKU1ZBTFVFNjQgcGxhdGZvcm1zKS4KKworICAgICAgICAxLiBB
IGxvdCBvZiBiYXNlbGluZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIG9wY29kZXMgdGhhdCBuZWVk
ZWQKKyAgICAgICAgY2hhbmdpbmcgZm9yIHRoZSB1bmxpbmtlZCBiYXNlbGluZSBhcmUgbm93IHVu
aWZpZWQgYmV0d2VlbiB0aGUKKyAgICAgICAgSlNWQUxVRTY0IGFuZCBKU1ZBTFVFMzJfNjQgcGxh
dGZvcm1zLiBOb3RlIHRoYXQgd2hpbGUgdGhpcyByZXF1aXJlZAorICAgICAgICBhZGRpbmcgc29t
ZSBhYnN0cmFjdGlvbiwgdGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBiYXNlbGluZSBKSVQgc2hv
dWxkCisgICAgICAgIGJlIGlkZW50aWNhbCB1c2luZyB0aGlzIGFic3RyYWN0aW9uIGNvbXBhcmVk
IHRvIGJlZm9yZS4KKworICAgICAgICAyLiBJIGFkZGVkIGEgSlNSSW5mbyBjbGFzcyB3aGljaCBk
ZWZpbmVzIHN0YW5kYXJkIG5hbWVzIGZvciBjZXJ0YWluCisgICAgICAgIEpTVmFsdWVSZWcgaW5z
dGFuY2VzLiBUaGlzIGVuYWJsZXMgYSBsb3Qgb2YgdGhlIHVuaWZpY2F0aW9uIGluIHRoZQorICAg
ICAgICBwb2ludCBhYm92ZSB0byBiZSBhIHNpbXBsZSB0cmFuc2Zvcm1hdGlvbi4gQWdhaW4sIHRo
aXMgc2hvdWxkIGhhdmUgbm8KKyAgICAgICAgaW1wYWN0IG9uIHRoZSBnZW5lcmF0ZWQgY29kZSBv
biBKU1ZBTFVFNjQsIGFwYXJ0IGZyb20gc29tZSByZWdpc3RlcgorICAgICAgICBzdWJzdGl0dXRp
b25zLgorCisgICAgICAgIDMuIFRoZSBzaXplcyBvZiB0aGUgcmVzb2x2ZV9zY29wZSBhbmQgZ2V0
X2Zyb21fc2NvcGUgb3BzIGluY3JlYXNlZAorICAgICAgICBzaWduaWZpY2FudGx5IHdpdGggdGhl
IHVubGlua2VkIGJhc2VsaW5lLiBUaGlzIGNhbiBjYXVzZSBpc3N1ZXMgb24KKyAgICAgICAgc29t
ZSBKU1ZBTFVFMzJfNjQgdGFyZ2V0cyB3aGVyZSBtZW1vcnkgaXMgbW9yZSBwcmVjaW91cywgc28g
Zm9yIHRoZXNlCisgICAgICAgIHR3byBvcHMgSSBzd2FwcGVkIGluIHRoZSBpbXBsZW1lbnRhdGlv
bnMgdW5kZXIgRVhUUkFfQ1RJX1RIVU5LUywgd2hpY2gKKyAgICAgICAgaW1wbGVtZW50IHRoZXNl
IHVzaW5nIHNoYXJlZCBzdHVicy4gVGhlc2Ugc3R1YnMgd29yayBvbiBhbGwgcGxhdGZvcm1zCisg
ICAgICAgIHRoYXQgc3VwcG9ydCBFTkFCTEUoSklUKSwgc28gdGhleSBhcmUgbm93IHRoZSBvbmx5
IGltcGxlbWVudGF0aW9uIGFuZAorICAgICAgICBJIGhhdmUgcmVtb3ZlZCB0aGUgYmFzaWMgYmxv
YXRlZCB2ZXJzaW9ucy4gTm90ZSBwdXRfdG9fc2NvcGUgc3VmZmVycworICAgICAgICBmcm9tIHRo
ZSBzYW1lIGNvZGUgc2l6ZSBpbmNyZWFzZSBidXQgY3VycmVudGx5IGRvZXMgbm90IGhhdmUgYSBz
aGFyZWQKKyAgICAgICAgc3R1YiBiYXNlZCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyBPSyBmb3Ig
bm93IHRvIHBhc3MgdGhlIHRlc3Qgc3VpdGVzCisgICAgICAgIG9uIEpTVkFMVUUzMl82NCwgYnV0
IHByb2JhYmx5IHNob3VsZCBiZSBhZGRyZXNzZWQgbGF0ZXIuCisKKyAgICAgICAgNC4gUmVtb3Zl
ZCBzb21lIHVudXNlZCBjb2RlIGFuZCBmaWVsZHMgSSBkaXNjb3ZlcmVkIHdoaWxlIHdvcmtpbmcg
b24KKyAgICAgICAgdGhpcywgc3RyaWN0bHkgc3BlYWtpbmcgdGhpcyBpcyBub3QgbmVjZXNzYXJ5
IGZvciB0aGUgZnVuY3Rpb25hbAorICAgICAgICBjaGFuZ2UuCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjpzdG9yZVZhbHVlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpp
c051bGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmlzTm90TnVsbCk6CisgICAg
ICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFR1cm5VbmRlZmluZWRJbnRvTnVsbCk6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6bm9PdmVybGFwKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpub092ZXJsYXBJbXBsKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjpub092ZXJsYXBJbXBsUmVnTWFzayk6CisgICAgICAgICogaml0L0dQUkluZm8uaDoK
KyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcyk6CisgICAgICAgIChKU0M6OkpJVDo6bGluayk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycyk6CisgICAgICAgICogaml0L0pJVC5o
OgorICAgICAgICAqIGppdC9KSVRBcml0aG1ldGljLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wSW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJl
VW5zaWduZWRBbmRKdW1wSW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlVW5z
aWduZWRJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX21vZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9j
b21wYXJlVW5zaWduZWRBbmRKdW1wKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVV
bnNpZ25lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3cpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcCk6CisgICAgICAgICogaml0L0pJ
VEFyaXRobWV0aWMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF91bnNpZ25l
ZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbmMpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZGVjKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVTZXR1cEZyYW1l
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgICogaml0L0pJVElubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFudE9wZXJhbmQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0
VmlydHVhbFJlZ2lzdGVyVGFnKToKKyAgICAgICAgKEpTQzo6bG9hZEFkZHJPZkNvZGVCbG9ja0Nv
bnN0YW50QnVmZmVyKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkQ29kZUJsb2NrQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudFBheWxvYWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudFRhZyk6CisgICAgICAgICogaml0
L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbW92KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2VuZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9u
ZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfamZhbHNlKToKKyAgICAgICAgKEpTQzo6SklUOjp2YWx1ZUlzRmFsc2V5R2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2plcV9udWxsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2puZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXFf
cHRyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2plcSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdHJ1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6dmFs
dWVJc1RydXRoeUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXEpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0RXEpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRj
aF9jaGFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9uZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b190aGlzKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmND
b21tb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5j
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2lzX2VtcHR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2Jvb2xlYW4pOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2lzX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX25vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdW5kZWZp
bmVkX29yX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3Jf
bnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXFfcHRyKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Vx
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lcSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9qZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcEVxSnVtcFNsb3cp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcSk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVPcFN0cmljdEVxSnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfanN0
cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX251bWJlcik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF90b19udW1lcmljKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3N0cmlu
Zyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19vYmplY3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9lbnRlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jaGVja190ZHopOgorICAg
ICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wdXRfZ2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9z
ZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0
ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29w
X3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0
X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVU
aHVuayk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3B1dF90b19hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9pbnRl
cm5hbF9maWVsZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcHJvcGVydHlfZW51
bWVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0V3JpdGVCYXJyaWVyKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaml0L0pTSW50ZXJmYWNlSklULmg6Cisg
ICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OnBvcFRodW5r
U3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOgorICAgICAgICAqIGpp
dC9UaHVua0dlbmVyYXRvcnMuaDoKKwogMjAyMS0xMS0wOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFj
aHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFBhcnNlIHJlZGlyZWN0IGFuZCBtb2Rp
ZnktaGVhZGVycyBhY3Rpb25zIGZvciBXS0NvbnRlbnRSdWxlTGlzdApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCAzMTk0ZTMwMjlkNGNmNjU0YmNmODg4YjNhOTBjMzVkNGIzNDM5M2Q2
Li44NGFhOWRkZTkyYjBhMzgzODc0NzIwNTY3MGYwZmIzNDM2YmY0MTY0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtNDc4NSw3ICs0Nzg1LDYgQEAKIAkJQTdCRkYzQkYxNzk4Njg5
NDAwMDJGNDYyIC8qIERGR0ZpbHRyYXRpb25SZXN1bHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHRmlsdHJhdGlvblJlc3VsdC5oOyBwYXRoID0gZGZnL0RGR0ZpbHRyYXRp
b25SZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdDMEM0QUExNjdDMDhD
RDAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTU2NyaXB0UmVmLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTdDMEM0QUIxNjdDMDhDRDAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJpdmF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NjcmlwdFJlZlByaXZhdGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTdDMUU4QzgxMTJFNzAxQzAwQTM3Rjk4IC8qIEpJVFByb3Bl
cnR5QWNjZXNzMzJfNjQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE3QzFFQUVCMTc5ODdBQjYwMDI5OURCMiAvKiBDTG9vcFN0YWNrSW5saW5lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDTG9vcFN0YWNrSW5saW5lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBN0MxRUFFQzE3OTg3QUI2MDAyOTlEQjIgLyogU3RhY2tWaXNp
dG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbGluZUVuZGluZyA9IDA7IHBh
dGggPSBTdGFja1Zpc2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0Mx
RUFFRDE3OTg3QUI2MDAyOTlEQjIgLyogU3RhY2tWaXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFN0YWNrVmlzaXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNjQxOSw3ICs2NDE4LDYgQEAKIAkJCQk3MjZCOTFBRjI2NTgxNjUzMDA4RTZGODIgLyog
SklUUGxhbi5oICovLAogCQkJCTcyMTMxQkY2MjY1ODdFRjIwMDcxMTRDRiAvKiBKSVRQbGFuU3Rh
Z2UuaCAqLywKIAkJCQk4NkNDODVDMzBFRTdBODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlBY2Nl
c3MuY3BwICovLAotCQkJCUE3QzFFOEM4MTEyRTcwMUMwMEEzN0Y5OCAvKiBKSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcCAqLywKIAkJCQlGRTNBMDZCODFDMTEwM0Q5MDAzOTBGREQgLyogSklUUmln
aHRTaGlmdEdlbmVyYXRvci5jcHAgKi8sCiAJCQkJRkUzQTA2QjkxQzExMDNEOTAwMzkwRkREIC8q
IEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCAqLywKIAkJCQk3MjEzMUJGMzI2NTg3RUYyMDA3MTE0
Q0YgLyogSklUU2FmZXBvaW50LmNwcCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRl
eCAwY2YzZWM1MzZkODc3NzFhZGY2NmQwNGViMWM0Nzc1YzNlMzI4NzNjLi44YTE1NDJjZTI5OTU1
MjIyMGExODQyNDlmZjg1OWFhM2E3OWNkNmM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0
CkBAIC02NTksNyArNjU5LDYgQEAgaml0L0pJVE9wY29kZXMzMl82NC5jcHAKIGppdC9KSVRPcGVy
YXRpb25zLmNwcAogaml0L0pJVFBsYW4uY3BwCiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCi1q
aXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKIGppdC9KSVRSaWdodFNoaWZ0R2VuZXJhdG9y
LmNwcAogaml0L0pJVFNhZmVwb2ludC5jcHAKIGppdC9KSVRTaXplU3RhdGlzdGljcy5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4IDI0NGYyMjI3
OTJjNzBmODFhZDA3NzEwN2ExNjYzMzJkYzczMWVmMGYuLjQ5ZWVmNDcwYThiNTUxMmVlODE1NWY5
OGE1Zjk0NjQ5ZWVmMmQ0NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaApAQCAtMjc2LDcgKzI3NiwxNyBAQCBwdWJsaWM6CiAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKHZhbHVlLnBheWxvYWQoKSksIHJlZ3MucGF5bG9hZEdQUigpKTsKICNlbmRpZgog
ICAgIH0KLSAgICAKKworICAgIHZvaWQgc3RvcmVWYWx1ZShKU1ZhbHVlIHZhbHVlLCBBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHN0b3JlNjQoSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFkZHJlc3MpOworI2VsaWYgVVNFKEpTVkFMVUUz
Ml82NCkKKyAgICAgICAgc3RvcmUzMihJbW0zMih2YWx1ZS50YWcoKSksIGFkZHJlc3Mud2l0aE9m
ZnNldChUYWdPZmZzZXQpKTsKKyAgICAgICAgc3RvcmUzMihJbW0zMih2YWx1ZS5wYXlsb2FkKCkp
LCBhZGRyZXNzLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCkpOworI2VuZGlmCisgICAgfQorCiAg
ICAgdm9pZCBzdG9yZVRydXN0ZWRWYWx1ZShKU1ZhbHVlIHZhbHVlLCBBZGRyZXNzIGFkZHJlc3Mp
CiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0xMDQ1LDYgKzEwNTUsMjQgQEAgcHVibGlj
OgogI2VuZGlmCiAgICAgfQogCisgICAgdm9pZCBpc051bGwoSlNWYWx1ZVJlZ3MgcmVncywgR1BS
UmVnIGRzdCkKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgY29tcGFyZTY0KEVx
dWFsLCByZWdzLnBheWxvYWRHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCks
IGRzdCk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBjb21wYXJlMzIoRXF1YWws
IHJlZ3MudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSwgZHN0KTsKKyNl
bmRpZgorICAgIH0KKworICAgIHZvaWQgaXNOb3ROdWxsKEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJl
ZyBkc3QpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGNvbXBhcmU2NChOb3RF
cXVhbCwgcmVncy5wYXlsb2FkR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwp
LCBkc3QpOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgY29tcGFyZTMyKE5vdEVx
dWFsLCByZWdzLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZyksIGRzdCk7
CisjZW5kaWYKKyAgICB9CisKICAgICBKdW1wIGJyYW5jaElmTnVsbChHUFJSZWcgZ3ByKQogICAg
IHsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMTExNCw2ICsxMTQyLDE3IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIGJyYW5jaFRlc3RQdHIoWmVybywgc3RyaW5nSW1wbEdQUiwgVHJ1c3RlZElt
bTMyKEpTU3RyaW5nOjppc1JvcGVJblBvaW50ZXIpKTsKICAgICB9CiAKKyAgICB2b2lkIGVtaXRU
dXJuVW5kZWZpbmVkSW50b051bGwoSlNWYWx1ZVJlZ3MgcmVncykKKyAgICB7CisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICAgICAgc3RhdGljX2Fzc2VydCgoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQg
JiB+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSA9PSBKU1ZhbHVlOjpWYWx1ZU51bGwpOworICAgICAg
ICBhbmQ2NChUcnVzdGVkSW1tMzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ3MucGF5bG9h
ZEdQUigpKTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHN0YXRpY19hc3NlcnQo
KEpTVmFsdWU6OlVuZGVmaW5lZFRhZyB8IDEpID09IEpTVmFsdWU6Ok51bGxUYWcpOworICAgICAg
ICBvcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVncy50YWdHUFIoKSk7CisjZW5kaWYKKyAgICB9CisK
ICAgICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9yQnl0ZU9mZnNldChwdHJkaWZmX3QgYnl0ZU9m
ZnNldCkKICAgICB7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBieXRlT2Zmc2V0KTsKQEAgLTE4NDUsNiArMTg4NCw0OSBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGJvb2wgc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlTmVlZHNNYWNyb1NjcmF0Y2hSZWdp
c3RlcigpOwogI2VuZGlmCiAKKyAgICAvLyBDaGVja3MgdGhhdCB0aGUgZ2l2ZW4gbGlzdCBvZiBH
UFJSZWdzIGFuZCBKU1ZhbHVlUmVncyBkbyBub3Qgb3ZlcmxhcC4gVXNlIHRoaXMgaW4gc3RhdGlj
CisgICAgLy8gYXNzZXJ0aW9ucyB0byBlbnN1cmUgdGhhdCByZWdpc3RlciBhbGlhc2VzIGxpdmUg
YXQgdGhlIHNhbWUgcG9pbnQgZG8gbm90IG1hcCB0byB0aGUgc2FtZQorICAgIC8vIGFyY2hpdGVj
dHVyYWwgcmVnaXN0ZXIuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5vT3ZlcmxhcChBcmdzLi4uIGFyZ3MpIHsgcmV0dXJuIG5vT3Zl
cmxhcEltcGwoMCwgYXJncy4uLik7IH0KKworcHJpdmF0ZToKKyAgICAvLyBCYXNlIGNhc2UKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bm9PdmVybGFwSW1wbCh1aW50NjRfdCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gR1BSUmVn
IGNhc2UKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbm9PdmVybGFwSW1wbCh1aW50NjRfdCB1c2VkLCBSZWdpc3RlcklEIGdwciwgQXJn
cy4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbWFzayA9IG5vT3ZlcmxhcEltcGxS
ZWdNYXNrKGdwcik7CisgICAgICAgIGlmICh1c2VkICYgbWFzaykKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG5vT3ZlcmxhcEltcGwodXNlZCB8IG1hc2ssIGFyZ3Mu
Li4pOworICAgIH0KKworICAgIC8vIEpTVmFsdWVSZWdzIGNhc2UKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUuLi4gQXJncz4KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbm9PdmVybGFwSW1wbCh1
aW50NjRfdCB1c2VkLCBKU1ZhbHVlUmVncyBqc3IsIEFyZ3MuLi4gYXJncykKKyAgICB7CisgICAg
ICAgIHVuc2lnbmVkIG1hc2sgPSBub092ZXJsYXBJbXBsUmVnTWFzayhqc3IucGF5bG9hZEdQUigp
KTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBtYXNrIHw9IG5vT3ZlcmxhcEltcGxS
ZWdNYXNrKGpzci50YWdHUFIoKSk7CisjZW5kaWYKKyAgICAgICAgaWYgKHVzZWQgJiBtYXNrKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbm9PdmVybGFwSW1wbCh1
c2VkIHwgbWFzaywgYXJncy4uLik7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBub092ZXJsYXBJbXBsUmVnTWFzayhSZWdpc3RlcklEIGdwcikKKyAgICB7CisgICAgICAg
IGlmIChncHIgPT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIHJldHVybiAwVUxMOworICAg
ICAgICB1bnNpZ25lZCBiaXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZ3ByKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoYml0IDwgc2l6ZW9mKHVpbnQ2NF90KSAqIENIQVJfQklUKTsKKyAgICAg
ICAgcmV0dXJuIDFVTEwgPDwgYml0OworICAgIH0KKwogcHJvdGVjdGVkOgogICAgIHZvaWQgY29w
eUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXJJbXBsKEdQUlJlZyBjYWxs
ZWVTYXZlc0J1ZmZlcik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
R1BSSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgKaW5kZXggZmQ5
MDk1ZDNmYjc3NTVmZDRkYzcwNDE5YzdlYWNmYjRmNzU2YzZlNC4uMmY4ZTU0NDczZjcyMTNjOTJk
ODg2YTE5NmFlMmM5MWMxZTQ0NmRjOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9HUFJJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgK
QEAgLTkyMywxMyArOTIzLDQzIEBAIHB1YmxpYzoKIAogI2VuZGlmIC8vIENQVShSSVNDVjY0KQog
CisvLyBUbyBtYWtlIHNvbWUgY29kZSBnZW5lcmljIG92ZXIgYm90aCBKU1ZBTFVFNjQgYW5kIEpT
VkFMVUUzMl82NCBwbGF0Zm9ybXMsIHdlIHVzZSBzdGFuZGFyZCBuYW1lcworLy8gZm9yIGNlcnRh
aW4gSlNWYWx1ZVJlZ3MgaW5zdGFuY2VzLiBPbiBKU1ZBTFVFNjQsIGEgSlNWYWx1ZVJlZ3MgY29y
cmVzcG9uZHMgdG8gYSBzaW5nbGUgNjQtYml0CisvLyBhcmNoaXRlY3R1cmFsIEdQUiwgd2hpbGUg
b24gSlNWQUxVRTMyXzY0LCBhIEpTVmFsdWVSZWdzIGNvcnJlc3BvbmRzIHRvIGEgcGFpciBvZiAz
Mi1iaXQKKy8vIGFyY2hpdGVjdHVyYWwgR1BScy4gTmV2ZXJ0aGVsZXNzLCBhIGxvdCBvZiB0aGUg
ZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0YXJnZXRzIGNhbiBiZSBhYnN0cmFjdGVkCisvLyBvdmVy
IHVzaW5nIHRoZSBmb2xsb3dpbmcgYWxpYXNlcy4gU2VlIEFzc2VtYmx5SGVscGVyOjpub092ZXJs
YXAgZm9yIGNhdGNoaW5nIGNvbmZsaWN0aW5nIHJlZ2lzdGVyCisvLyBhbGlhc2luZyBzdGF0aWNh
bGx5LgorY2xhc3MgSlNSSW5mbyB7CitwdWJsaWM6CisgICAgLy8gVGVtcG9yYXJ5IHJlZ2lzdGVy
cy4KKyAgICAvLyBPbiBKU1ZBTFVFNjQsIGpzUmVnVHsyKm4rMX17MipufSBhbHdheXMgbWFwcyBv
bmUtdG8tb25lIHRvIEdQUiByZWdUezIqbn0KKyAgICAvLyBPbiBKU1ZBTFVFMzJfNjQsIGpzUmVn
VHsyKm4rMX17MipufSBhbHdheXMgbWFwcyB0byB0aGUgR1BSIHBhaXIgcmVnVHsyKm4rMX0gLyBy
ZWdUezIqbn0KKyAgICAvLyBUaGlzIG1hcHBpbmcgaXMgZGVsaWJlcmF0ZWx5IHNpbXBsZSB0byBl
YXNlIHJlYXNvbmluZyBhYm91dCBhbGlhc2luZy4gRS5nLjoKKyAgICAvLyBTZWVpbmcgJ2pzUmVn
VDEwJyBpbmRpY2F0ZXMgdGhhdCBpbiBnZW5lcmFsIGJvdGggJ3JlZ1QxJyBhbmQgJ3JlZ1QwJyBt
YXkgYmUgdXNlZC4KKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSlNW
YWx1ZVJlZ3MganNSZWdUMTAgeyBHUFJJbmZvOjpyZWdUMCB9OworICAgIHN0YXRpYyBjb25zdGV4
cHIgSlNWYWx1ZVJlZ3MganNSZWdUMzIgeyBHUFJJbmZvOjpyZWdUMiB9OworI2VsaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICBzdGF0aWMgY29uc3RleHByIEpTVmFsdWVSZWdzIGpzUmVnVDEwIHsg
R1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBK
U1ZhbHVlUmVncyBqc1JlZ1QzMiB7IEdQUkluZm86OnJlZ1QzLCBHUFJJbmZvOjpyZWdUMiB9Owor
I2VuZGlmCisKKyAgICAvLyBSZXR1cm4gdmFsdWUgcmVnaXN0ZXIKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmV0dXJuVmFsdWVKU1IgeyBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiB9OworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBzdGF0
aWMgY29uc3RleHByIEpTVmFsdWVSZWdzIHJldHVyblZhbHVlSlNSIHsgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiB9OworI2VuZGlmCit9OworCiAvLyBU
aGUgYmFzZWxpbmUgSklUIHVzZXMgImFjY3VtdWxhdG9yIiBzdHlsZSBleGVjdXRpb24gd2l0aCBy
ZWdUMCAoZm9yIDY0LWJpdCkKIC8vIGFuZCByZWdUMCArIHJlZ1QxIChmb3IgMzItYml0KSBzZXJ2
aW5nIGFzIHRoZSBhY2N1bXVsYXRvciByZWdpc3RlcihzKSBmb3IKIC8vIHBhc3NpbmcgcmVzdWx0
cyBvZiBvbmUgb3Bjb2RlIHRvIHRoZSBuZXh0LiBIZW5jZToKLUNPTVBJTEVfQVNTRVJUKEdQUklu
Zm86OnJlZ1QwID09IEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZWdUMF9tdXN0X2VxdWFsX3Jl
dHVyblZhbHVlR1BSKTsKK3N0YXRpY19hc3NlcnQoR1BSSW5mbzo6cmVnVDAgPT0gR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi1DT01QSUxFX0FTU0VSVChH
UFJJbmZvOjpyZWdUMSA9PSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIHJlZ1QxX211c3RfZXF1
YWxfcmV0dXJuVmFsdWVHUFIyKTsKK3N0YXRpY19hc3NlcnQoR1BSSW5mbzo6cmVnVDEgPT0gR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKICNlbmRpZgorc3RhdGljX2Fzc2VydChKU1JJbmZvOjpq
c1JlZ1QxMCA9PSBKU1JJbmZvOjpyZXR1cm5WYWx1ZUpTUik7CiAKIGlubGluZSBHUFJSZWcgZXh0
cmFjdFJlc3VsdChHUFJSZWcgcmVzdWx0KSB7IHJldHVybiByZXN1bHQ7IH0KICNpZiBVU0UoSlNW
QUxVRTY0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IDlmNGYyMjk4ZmI0NGQwOTNh
Mzc5YTIwMzgzNzAwMTkxM2E0OTI5YmUuLjQ0ZTNjYTg1NjNlNDg5NDMzOGE2YmIwYTA4ZjhlZTdl
OWZkNzc5OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTY0NCw5ICs2NDQsNiBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfZGVsX2J5X3ZhbCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2Rl
bF9ieV9pZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3N1YikKLSNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfZnJv
bV9zY29wZSkKLSNlbmRpZgogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfcHV0X3RvX3Nj
b3BlKQogCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9pdGVyYXRvcl9vcGVuKQpAQCAt
ODE1LDEzICs4MTIsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZUFuZExpbmtXaXRob3V0RmluYWxpemlu
ZyhKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAgICAgICAgICAgaWYgKG1fdW5s
aW5rZWRDb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKSAmJiAhYXJndW1lbnQpCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSBDYWxsRnJh
bWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhhcmd1bWVudCkgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAg
ICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgeyByZWdUMCB9OwotI2VsaWYgVVNF
KEpTVkFMVUUzMl82NCkKLSAgICAgICAgICAgICAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyB7IHJlZ1QxLCByZWdUMCB9OwotI2VuZGlmCi0gICAgICAgICAgICAgICAgbG9hZFZh
bHVlKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCksIHJlc3VsdFJlZ3MpOwotICAg
ICAgICAgICAgICAgIHN0b3JlVmFsdWUocmVzdWx0UmVncywgQWRkcmVzcyhyZWdUMiwgYXJndW1l
bnQgKiBzaXplb2YoVmFsdWVQcm9maWxlKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1
Y2tldCgpKSk7CisgICAgICAgICAgICAgICAgbG9hZFZhbHVlKEFkZHJlc3MoY2FsbEZyYW1lUmVn
aXN0ZXIsIG9mZnNldCksIGpzUmVnVDEwKTsKKyAgICAgICAgICAgICAgICBzdG9yZVZhbHVlKGpz
UmVnVDEwLCBBZGRyZXNzKHJlZ1QyLCBhcmd1bWVudCAqIHNpemVvZihWYWx1ZVByb2ZpbGUpICsg
VmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KQEAgLTEwMTcsNyArMTAwOSw3IEBAIHZvaWQgSklUOjpsaW5rKCkKICAg
ICBtX2ppdENvZGUtPm1fY29uc3RhbnRQb29sID0gV1RGTW92ZShtX2NvbnN0YW50UG9vbCk7CiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICBtX2ppdENvZGUtPm1faXNTaGFyZWFibGUgPSBtX2lzU2hh
cmVhYmxlOwotI2Vsc2UKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgbV9qaXRDb2RlLT5t
X2lzU2hhcmVhYmxlID0gZmFsc2U7CiAjZW5kaWYKIApAQCAtMTA3Niw3ICsxMDY4LDYgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMoKQogICAgIH0KIAogICAgIGlm
ICghbV9leGNlcHRpb25DaGVja3MuZW1wdHkoKSkgewotICAgICAgICBtX2V4Y2VwdGlvbkhhbmRs
ZXIgPSBsYWJlbCgpOwogICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5saW5rKHRoaXMpOwogCiAg
ICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCku
dG9wRW50cnlGcmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCBkZTJjNWNlNzcwYmJk
NTkzYjdhZTVmZDFhNjUyNjczODk0M2RkOWExLi4xYzY0OTYzZjBlOTQxMzI5ODM5NTU2YzZiMmVm
ZmY3MmZkNWFjYWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTI1NCw3ICsyNTQsMTEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgbG9hZENvbnN0YW50KHVuc2lnbmVkIGNv
bnN0YW50SW5kZXgsIEdQUlJlZyk7CiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBsb2FkR2xv
YmFsT2JqZWN0KEdQUlJlZyk7Ci0gICAgICAgIHZvaWQgbG9hZENvZGVCbG9ja0NvbnN0YW50KFZp
cnR1YWxSZWdpc3RlciwgR1BSUmVnKTsKKyAgICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3Rh
bnQoVmlydHVhbFJlZ2lzdGVyLCBKU1ZhbHVlUmVncyk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkK
KyAgICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnRQYXlsb2FkKFZpcnR1YWxSZWdpc3Rl
ciwgUmVnaXN0ZXJJRCk7CisgICAgICAgIHZvaWQgbG9hZENvZGVCbG9ja0NvbnN0YW50VGFnKFZp
cnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCk7CisjZW5kaWYKIAogICAgICAgICB2b2lkIGVtaXRQ
dXRDb2RlQmxvY2tUb0ZyYW1lSW5Qcm9sb2d1ZShHUFJSZWcgcmVzdWx0ID0gcmVnVDApOwogCkBA
IC0zNDgsOSArMzUyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE9wPgogICAgICAgICBQcml2YXRlRmllbGRQdXRLaW5kIHByaXZhdGVGaWVsZFB1dEtpbmQo
T3ApOwogCi0gICAgICAgIGVudW0gRmluYWxPYmplY3RNb2RlIHsgTWF5QmVGaW5hbCwgS25vd25O
b3RGaW5hbCB9OwotCiAgICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBkc3QpOworICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KTsK
ICAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3Qs
IEpTVmFsdWVSZWdzIHNyYyk7CiAgICAgICAgIHZvaWQgZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3Rl
ciwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVn
aXN0ZXIpOwogCkBAIC0zNjEsMzMgKzM2NCwyNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Ym9vbCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJl
Z2lzdGVyIG9wMiwgVmlydHVhbFJlZ2lzdGVyJiBvcCwgaW50MzJfdCYgY29uc3RhbnQpOwogCiAg
ICAgICAgIHZvaWQgZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQg
dmFsdWUpOwotICAgICAgICB2b2lkIGVtaXRMb2FkVGFnKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0
ZXJJRCB0YWcpOwotICAgICAgICB2b2lkIGVtaXRMb2FkUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIs
IFJlZ2lzdGVySUQgcGF5bG9hZCk7CiAKLSAgICAgICAgdm9pZCBlbWl0TG9hZChjb25zdCBKU1Zh
bHVlJiB2LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKLSAgICAgICAgdm9p
ZCBlbWl0TG9hZChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBh
eWxvYWQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9p
ZCBlbWl0TG9hZDIoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZzEsIFJlZ2lzdGVySUQg
cGF5bG9hZDEsIFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBh
eWxvYWQyKTsKKyAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlciBzcmMsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQpOworICAgICAgICB2
b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0
ZXJJRCBkc3QpOwogCiAgICAgICAgIHZvaWQgZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciwgUmVn
aXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZy
YW1lUmVnaXN0ZXIpOwogICAgICAgICB2b2lkIGVtaXRTdG9yZUludDMyKFZpcnR1YWxSZWdpc3Rl
ciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKLSAgICAg
ICAgdm9pZCBlbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFRydXN0ZWRJbW0zMiBwYXls
b2FkLCBib29sIGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKICAgICAgICAgdm9pZCBlbWl0U3RvcmVD
ZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNDZWxs
ID0gZmFsc2UpOwogICAgICAgICB2b2lkIGVtaXRTdG9yZUJvb2woVmlydHVhbFJlZ2lzdGVyLCBS
ZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0Jvb2wgPSBmYWxzZSk7Ci0gICAgICAgIHZv
aWQgZW1pdFN0b3JlRG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3RlcklEIHZhbHVlKTsK
IAogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0
ZXIpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVn
aXN0ZXIsIFJlZ2lzdGVySUQgdGFnKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoUmVnaXN0ZXJJRCk7CiAKLSAgICAgICAgdm9pZCBjb21waWxlR2V0QnlJZEhvdFBh
dGgoY29uc3QgSWRlbnRpZmllciopOwotCiAgICAgICAgIC8vIEFyaXRobWV0aWMgb3Bjb2RlIGhl
bHBlcnMKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRC
aW5hcnlEb3VibGVPcChjb25zdCBJbnN0cnVjdGlvbiAqLCBPcGVyYW5kVHlwZXMsIEp1bXBMaXN0
JiBub3RJbnQzMk9wMSwgSnVtcExpc3QmIG5vdEludDMyT3AyLCBib29sIG9wMUlzSW5SZWdpc3Rl
cnMgPSB0cnVlLCBib29sIG9wMklzSW5SZWdpc3RlcnMgPSB0cnVlKTsKIAogI2Vsc2UgLy8gVVNF
KEpTVkFMVUUzMl82NCkKICAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KTsKLSAgICAgICAgdm9pZCBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhWaXJ0dWFsUmVnaXN0ZXIgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBWaXJ0
dWFsUmVnaXN0ZXIgc3JjMiwgUmVnaXN0ZXJJRCBkc3QyKTsKICAgICAgICAgdm9pZCBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSA9IHJl
Z1QwKTsKICAgICAgICAgdm9pZCBlbWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFJl
Z2lzdGVySUQgcGF5bG9hZCwgYm9vbCAvKiBvbmx5IHVzZWQgaW4gSlNWYWx1ZTMyXzY0ICovID0g
ZmFsc2UpCiAgICAgICAgIHsKQEAgLTQwMyw5ICszOTgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoUmVnaXN0ZXJJRCk7CiAgICAgICAg
IHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90TnVtYmVyKFJlZ2lzdGVySUQpOwogICAgICAgICB2
b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdp
c3RlcklEIHNjcmF0Y2gpOwotCi0gICAgICAgIHZvaWQgY29tcGlsZUdldEJ5SWRIb3RQYXRoKFZp
cnR1YWxSZWdpc3RlciBiYXNlUmVnLCBjb25zdCBJZGVudGlmaWVyKik7Ci0KICNlbmRpZiAvLyBV
U0UoSlNWQUxVRTMyXzY0KQogCiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKEpTVmFsdWVSZWdzKTsKQEAgLTY0Nyw5ICs2MzksNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9u
Kik7Ci0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwotI2VuZGlmCiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3Rv
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwogCiAgICAgICAgIHZvaWQgZW1pdFNsb3dDYXNlQ2FsbChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBTbG93UGF0aEZ1bmN0aW9uKTsKQEAg
LTY3MSwyMSArNjYwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdE5ld0Z1
bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdFZhcklu
amVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyk7CiAgICAg
ICAgIHZvaWQgZW1pdFZhclJlYWRPbmx5Q2hlY2soUmVzb2x2ZVR5cGUsIEdQUlJlZyBzY3JhdGNo
R1BSKTsKLSAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRz
dCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1
bnNpZ25lZCBkZXB0aCk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2so
VmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KTsKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVl
KiBvcGVyYW5kLCBHUFJSZWcpOwotICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQ
b2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcpOwotI2Vsc2UKLSAgICAgICAgdm9pZCBl
bWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnIHRh
ZywgR1BSUmVnIHBheWxvYWQpOwotICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihK
U1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9hZCk7Ci0jZW5kaWYKLSAg
ICAgICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRw
dHJfdCBvcGVyYW5kKTsKICAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNl
dCopOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQoR1BSUmVnIHBvaW50
ZXJUb1NldCk7Ci0gICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9w
ZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwotICAgICAgICB2
b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVy
YW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKik7Ci0gICAgICAgIHZv
aWQgZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3Bl
cmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAKICAgICAgICAg
dm9pZCBlbWl0SW5pdFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcik7CiAKQEAgLTczMywxNCArNzA5
LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZhbHVlSXNGYWxzZXlHZW5lcmF0b3IoVk0mKTsKICAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc1Ry
dXRoeUdlbmVyYXRvcihWTSYpOwotCisjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1Mp
CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNs
b3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9yZXNvbHZlX3Njb3BlR2Vu
ZXJhdG9yKFZNJik7CiAgICAgICAgIHRlbXBsYXRlIDxSZXNvbHZlVHlwZT4KICAgICAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVPcEdldEZy
b21TY29wZVRodW5rKFZNJik7CiAgICAgICAgIHRlbXBsYXRlIDxSZXNvbHZlVHlwZT4KICAgICAg
ICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2VuZXJhdGVP
cFJlc29sdmVTY29wZVRodW5rKFZNJik7Ci0jZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAKICAgICAgICAgSnVtcCBnZXRTbG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogICAgICAgICB7CkBAIC05ODcsOSArOTYyLDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3M7CiAgICAgICAgIEp1bXBM
aXN0IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrOwotI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgTGFiZWwgbV9leGNlcHRpb25IYW5kbGVyOwotI2Vu
ZGlmCiAKICAgICAgICAgdW5zaWduZWQgbV9nZXRCeUlkSW5kZXggeyBVSU5UX01BWCB9OwogICAg
ICAgICB1bnNpZ25lZCBtX2dldEJ5VmFsSW5kZXggeyBVSU5UX01BWCB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKaW5kZXggOGYxYTdjNWI4MzQ2MTBhYTBi
OGFmYzgzMTdiOTFjZGUwMTc0ZTZiMy4uOGY0ZDgwYjk5Y2ZjOWU5MWZlMjMzZDRiZTkyNmY1NjM3
ZjY2ZWM2ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1l
dGljLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3Bw
CkBAIC0yMTAsNyArMjEwLDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZp
cnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2kKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9w
MiwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQocmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMSk7CiAK
QEAgLTIzOCw3ICsyMzksOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1w
SW1wbChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgbwogICAgICAgICBpbnQz
Ml90IG9wMWltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDEpOwogICAgICAgICBhZGRKdW1w
KGJyYW5jaDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDEsIEltbTMyKG9wMWltbSkpLCB0YXJn
ZXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwg
cmVnVDAsIG9wMiwgcmVnVDEpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwg
cmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwogICAg
ICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsK
ICAgICB9CiB9CkBAIC0yNjQsNyArMjY2LDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2ln
bmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXIKICAg
ICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKICAgICAg
ICAgY29tcGFyZTMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDAsIEltbTMyKG9wMWltbSksIHJl
Z1QwKTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEs
IHJlZ1QwLCBvcDIsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEs
IHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKICAg
ICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CiAgICAgfQog
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CkBAIC00MjIsNyAr
NDI1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgQVNTRVJUKHJlZ1Q0ICE9IGVkeCk7CiAgICAgQVNTRVJUKHJlZ1Q0
ICE9IGVjeCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1Q0LCBvcDIs
IGVjeCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1Q0KTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgZWN4KTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bnQocmVnVDQpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChlY3gpOwogCkBAIC00ODAs
NyArNDg0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW8KIAogICAgIC8vIENoYXJhY3RlciBs
ZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewotICAgICAgICBlbWl0
TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCByZWdUMSwgcmVnVDApOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwo
cmVnVDEpKTsKICAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7CiAgICAgICAgIGVtaXRMb2FkQ2hh
cmFjdGVyU3RyaW5nKHJlZ1QwLCByZWdUMCwgZmFpbHVyZXMpOwpAQCAtNDg5LDcgKzQ5Myw3IEBA
IHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgUmVsYXRpb25hbENvbmRpdGlvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7Ci0gICAgICAgIGVtaXRMb2FkKG9wMSwgcmVn
VDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCBy
ZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMSkpOwogICAg
ICAgICBKdW1wTGlzdCBmYWlsdXJlczsKICAgICAgICAgZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmco
cmVnVDAsIHJlZ1QwLCBmYWlsdXJlcyk7CkBAIC00OTgsMTUgKzUwMiwxNiBAQCB2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0
aW9uYWxDb25kaXRpbwogICAgICAgICByZXR1cm47CiAgICAgfSAKICAgICBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMywgcmVnVDIpOwogICAg
ICAgICBub3RJbnQzMk9wMi5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdUMykpOwogICAgICAg
ICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDIsIEltbTMyKGdldENv
bnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIoKSkpLCB0YXJnZXQpOwogICAgIH0gZWxzZSBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBlbWl0TG9hZChvcDEsIHJlZ1Qx
LCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMSwgcmVn
VDApOwogICAgICAgICBub3RJbnQzMk9wMS5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdUMSkp
OwogICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKGdldENv
bnN0YW50T3BlcmFuZChvcDIpLmFzSW50MzIoKSkpLCB0YXJnZXQpOwogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGVtaXRMb2FkMihvcDEsIHJlZ1QxLCByZWdUMCwgb3AyLCByZWdUMywgcmVnVDIpOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDEsIHJlZ1QwKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAgICAgIG5v
dEludDMyT3AxLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1QxKSk7CiAgICAgICAgIG5vdElu
dDMyT3AyLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1QzKSk7CiAgICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDIpLCB0YXJnZXQpOwpAQCAtNTMzLDEzICs1
MzgsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWwKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAogICAgIGlm
IChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGVtaXRMb2FkKG9wMiwgcmVn
VDMsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QzLCBy
ZWdUMik7CiAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdU
MiwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigpKSksIHRhcmdldCk7CiAg
ICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGVtaXRM
b2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBy
ZWdUMCwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikuYXNJbnQzMigpKSksIHRhcmdldCk7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdExvYWQyKG9wMSwgcmVnVDEsIHJlZ1QwLCBvcDIs
IHJlZ1QzLCByZWdUMik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdU
MSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDMsIHJl
Z1QyKTsKICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCByZWdUMiks
IHRhcmdldCk7CiAgICAgfQogfQpAQCAtNTUzLDEzICs1NTksMTQgQEAgdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25h
bENvbmRpdGkKICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CiAKICAg
ICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0TG9hZChvcDIs
IHJlZ1QzLCByZWdUMik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdU
MywgcmVnVDIpOwogICAgICAgICBjb21wYXJlMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMiwg
SW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigpKSwgcmVnVDApOwogICAgIH0g
ZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBlbWl0TG9hZChv
cDEsIHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBy
ZWdUMSwgcmVnVDApOwogICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIo
Z2V0Q29uc3RhbnRPcGVyYW5kKG9wMikuYXNJbnQzMigpKSwgcmVnVDApOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIGVtaXRMb2FkMihvcDEsIHJlZ1QxLCByZWdUMCwgb3AyLCByZWdUMywgcmVnVDIp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDEsIHJlZ1QwKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAgICAg
IGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCByZWdUMiwgcmVnVDApOwogICAgIH0KICAgICBl
bWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwpAQCAtNTc1LDggKzU4Miw4IEBAIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERv
dWJsZUNvbmRpdGlvCiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgZW1pdExv
YWQob3AxLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1Q0KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDQsIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOwpAQCAtNjA0LDcgKzYxMSw3IEBAIHZvaWQgSklUOjplbWl0Qmlu
YXJ5RG91YmxlT3AoY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBPcGVyYW5kVHlwZXMg
dHlwZXMsCiAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZSwgcmVnVDEsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CiAKICAgICAgICAgaWYgKCFvcDJJc0lu
UmVnaXN0ZXJzKQotICAgICAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOworICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QzLCByZWdUMik7CiAKICAg
ICAgICAgSnVtcCBkb3VibGVPcDIgPSBicmFuY2gzMihCZWxvdywgcmVnVDMsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpMb3dlc3RUYWcpKTsKIApAQCAtNjY4LDcgKzY3NSw3IEBAIHZvaWQgSklUOjpl
bWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBPcGVyYW5k
VHlwZXMgdHlwZXMsCiAgICAgICAgIEFTU0VSVChvcDJJc0luUmVnaXN0ZXJzKTsKIAogICAgICAg
ICBpZiAoIW9wMUlzSW5SZWdpc3RlcnMpCi0gICAgICAgICAgICBlbWl0TG9hZFBheWxvYWQob3Ax
LCByZWdUMCk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChvcDEs
IHJlZ1QwKTsKIAogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMy
XzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNw
cAppbmRleCAyMjVlMTRhMWJlMDhhYmQ1NTBhZDYzYzQ1ZWI1MWExYzQ2MmUxYzIwLi4yZGRiY2Iz
MDY4YmVkOWI3NTg3NDU4MTNkYzU1NDNlZWU5OGQ1YTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwCkBAIC00Nyw3ICs0Nyw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3Vuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgCi0gICAgZW1p
dExvYWQob3AxLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCByZWdUMSwgcmVnVDApOwogICAgIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIo
cmVnVDEpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIFRydXN0
ZWRJbW0zMigwKSkpOwpAQCAtNTksNyArNTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEluYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
RHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0TG9hZChzcmNEc3QsIHJlZ1QxLCBy
ZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QxLCByZWdUMCk7
CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKHJlZ1QxKSk7CiAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKQEAg
LTcxLDcgKzcxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BEZWM+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdCA9IGJ5dGVjb2RlLm1f
c3JjRHN0OwogCi0gICAgZW1pdExvYWQoc3JjRHN0LCByZWdUMSwgcmVnVDApOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMSwgcmVnVDApOwogCiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RJbnQzMihyZWdUMSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFN1YjMy
KE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcAppbmRleCAwOTE5OTE1ODQ2OGMwZmUxMDJiNWRmYmZhMmJlNGZlMTczMTk3
ZTJiLi5jMzg2MTE5Nzc3YWYxMDE5MDQzNDhkNGUwNWUzYmE2MDM3MzEyMjFmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKQEAgLTQzLDE4ICs0MywxMiBAQAogbmFtZXNwYWNl
IEpTQyB7CiAKIG5hbWVzcGFjZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBjb25zdGV4cHIg
SlNWYWx1ZVJlZ3MgcmV0dXJuVmFsdWVKU1IgeyBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiB9Owot
ICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBjYWxsZWVKU1IgeyBHUFJJbmZvOjpyZWdUMCB9Owot
I2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmV0dXJu
VmFsdWVKU1IgeyBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVl
R1BSIH07Ci0gICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGNhbGxlZUpTUiB7IEdQUkluZm86OnJl
Z1QxLCBHUFJJbmZvOjpyZWdUMCB9OwotI2VuZGlmCisgICAgY29uc3RleHByIEpTVmFsdWVSZWdz
IGNhbGxlZUpTUiA9IEpTUkluZm86OmpzUmVnVDEwOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9y
ZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBzdGF0aWNf
YXNzZXJ0KCFyZXR1cm5WYWx1ZUpTUi51c2VzKGNhbGxGcmFtZVJlZ2lzdGVyKSk7CisgICAgc3Rh
dGljX2Fzc2VydChub092ZXJsYXAocmV0dXJuVmFsdWVKU1IsIGNhbGxGcmFtZVJlZ2lzdGVyKSk7
CiAKICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBpbiByZXR1cm5WYWx1ZUdQUiAocmV0dXJuVmFs
dWVHUFIyL3JldHVyblZhbHVlR1BSIG9uIDMyLWJpdCkuCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7CkBAIC0xNDEsMjAgKzEzNSwxNCBAQCBKSVQ6
OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgSklUQ29uc3RhbnRQb29sOjpD
b25zdGFudCBjYWxsTGlua0luZgogI2VuZGlmCiAKICAgICB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGFyZ3VtZW50c0pTUiB7IHJlZ1QyIH07Ci0j
ZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYXJn
dW1lbnRzSlNSIHsgcmVnVDMsIHJlZ1QyIH07Ci0jZW5kaWYKLQotICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgYXJndW1lbnRzSlNSKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIGpzUmVnVDMyKTsKICAgICAgICAgRl9KSVRPcGVyYXRp
b25fR0ZKWlogc2V0dXBPcGVyYXRpb247CiAgICAgICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICAgICAgc2V0dXBPcGVyYXRpb24g
PSBvcGVyYXRpb25TZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZTsKICAg
ICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24oc2V0
dXBPcGVyYXRpb24sIHJlZ1Q0LCByZWdUMSwgYXJndW1lbnRzSlNSLCBmaXJzdFZhckFyZ09mZnNl
dCwgcmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCByZWdUNCwg
cmVnVDEsIGpzUmVnVDMyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOwogICAgICAgICBtb3Zl
KHJldHVyblZhbHVlR1BSLCByZWdUNSk7CiAgICAgfQogCkBAIC0xNjcsNyArMTU1LDcgQEAgSklU
Ojpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIEpJVENvbnN0YW50UG9vbDo6
Q29uc3RhbnQgY2FsbExpbmtJbmYKICAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7CiAgICAgCiAg
ICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCi0gICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHRoaXNK
U1IgPSBjYWxsZWVKU1I7IC8vIFVzZWQgYXMgdGVtcG9yYXJ5IHJlZ2lzdGVyCisgICAgY29uc3Rl
eHByIEpTVmFsdWVSZWdzIHRoaXNKU1IgPSBqc1JlZ1QxMDsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHRoaXNWYWx1ZSwgdGhpc0pTUik7CiAgICAgc3RvcmVWYWx1ZSh0aGlzSlNSLCBBZGRy
ZXNzKHJlZ1Q1LCBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogCkBAIC0zMTIsNyArMzAwLDcgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBj
YWxsTGlua0luZm9JbmQKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgLy8gV2UgbmVlZCB0
aGlzIG9uIEpTVkFMVUUzMl82NCBvbmx5IGFzIG9uIEpTVkFMVUU2NCBhIHBvaW50ZXIgY29tcGFy
aXNvbiBpbiB0aGUgRGF0YUlDIGZhc3QKLSAgICAvLyBwYXRjaCBjYXRjaGVzIHRoaXMuCisgICAg
Ly8gcGF0aCBjYXRjaGVzIHRoaXMuCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGNh
bGxlZUpTUikpOwogI2VuZGlmCiAKQEAgLTQ3Nyw3ICs0NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pdGVyYXRvcl9vcGVuKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKICAgICB1c2lu
ZyBCYXNlbGluZUdldEJ5SWRSZWdpc3RlcnM6OnJlc3VsdEpTUjsKICAgICB1c2luZyBCYXNlbGlu
ZUdldEJ5SWRSZWdpc3RlcnM6OnN0dWJJbmZvR1BSOwogCi0gICAgc3RhdGljX2Fzc2VydCghcmV0
dXJuVmFsdWVKU1IudXNlcyhzdHViSW5mb0dQUikpOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVy
bGFwKHJldHVyblZhbHVlSlNSLCBzdHViSW5mb0dQUikpOwogICAgIHN0YXRpY19hc3NlcnQocmV0
dXJuVmFsdWVKU1IgPT0gYmFzZUpTUik7IC8vIE90aGVyd2lzZSB3aWxsIG5lZWQgbW92ZShyZXR1
cm5WYWx1ZUpTUiwgYmFzZUpTUikKICAgICBzdGF0aWNfYXNzZXJ0KGJhc2VKU1IgPT0gcmVzdWx0
SlNSKTsKIApAQCAtNTgyLDcgKzU3MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25l
eHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogICAgIGFkdmFuY2VUb05leHRDaGVj
a3BvaW50KCk7CiAKICAgICAvLyBjYWxsIHJlc3VsdCAoeyBkb25lLCB2YWx1ZSB9IEpTT2JqZWN0
KSBpbiByZWdUMCAgKHJlZ1QxL3JlZ1QwIG9yIDMyLWJpdCkKLSAgICBzdGF0aWNfYXNzZXJ0KCFy
ZXR1cm5WYWx1ZUpTUi51c2VzKHN0dWJJbmZvR1BSKSk7CisgICAgc3RhdGljX2Fzc2VydChub092
ZXJsYXAocmVzdWx0SlNSLCBzdHViSW5mb0dQUikpOwogCiAgICAgY29uc3RleHByIEpTVmFsdWVS
ZWdzIGl0ZXJDYWxsUmVzdWx0SlNSID0gZG9udENsb2JiZXJKU1I7CiAgICAgbW92ZVZhbHVlUmVn
cyhyZXR1cm5WYWx1ZUpTUiwgaXRlckNhbGxSZXN1bHRKU1IpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZXMuaAppbmRleCBkNjAyZmM5MjZjOTMyOWUyMTJhNGQ1MDdmZDg2ZDA3OGFi
YTdiYTFhLi5kYjgxOTA3ZjliMDQ0MGY2N2JmY2Q4NjJkYzhhNGUyOGNmOWI4NTRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaApAQCAtNjUsMTIgKzY1LDggQEAgQUxXQVlT
X0lOTElORSBib29sIEpJVDo6aXNLbm93bkNlbGwoVmlydHVhbFJlZ2lzdGVyIHNyYykKIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIg
c3JjKQogewogICAgIEFTU0VSVChzcmMuaXNDb25zdGFudCgpKTsKLSNpZiBVU0UoSlNWQUxVRTMy
XzY0KQotICAgIHJldHVybiBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwot
I2Vsc2UKICAgICBSRUxFQVNFX0FTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbihzcmMpICE9IFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6
TGlua1RpbWVDb25zdGFudCk7CiAgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENv
bnN0YW50KHNyYyk7Ci0jZW5kaWYKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1
dEludFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVu
dHJ5KQpAQCAtMTY3LDM1ICsxNjMsMjIgQEAgQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGkKIEFMV0FZ
U19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1
ZUdQUik7Ci0jZWxzZQotICAgIGVtaXRTdG9yZShkc3QsIHJldHVyblZhbHVlR1BSMiwgcmV0dXJu
VmFsdWVHUFIpOwotI2VuZGlmCisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVy
blZhbHVlSlNSKTsKICAgICByZXR1cm4gY2FsbDsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoQWRkcmVzcyBm
dW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrKGZ1bmN0aW9uKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci0jZWxzZQotICAgIGVtaXRTdG9yZShk
c3QsIHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpOwotI2VuZGlmCisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlSlNSKTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgQnl0ZWNvZGU+CiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShj
b25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRh
Zz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0
dXJuVmFsdWVHUFIpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1
ZUdQUik7Ci0jZWxzZQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFs
dWVSZWdzKHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKLSAgICBlbWl0U3RvcmUo
ZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKLSNlbmRpZgorICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlSlNSKTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVKU1IpOwogICAgIHJldHVybiBjYWxsOwog
fQogCkBAIC0yMDMsMTMgKzE4Niw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgogQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFs
dWVSZXN1bHRXaXRoUHJvZmlsZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEFkZHJlc3MgZnVu
Y3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhmdW5jdGlvbik7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKLSNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1
ZUdQUikpOwotICAgIGVtaXRTdG9yZShkc3QsIHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVH
UFIpOwotI2VuZGlmCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJu
VmFsdWVKU1IpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUpT
Uik7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxs
KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIFZpcnR1YWxSZWdpc3RlciBy
ZWcpCkBAIC0zMzIsMTIgKzMxMCw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFu
ZENvbnN0YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQogdGVtcGxhdGU8dHlwZW5hbWUgT3A+
CiBpbmxpbmUgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUoT3A6Ok1ldGFk
YXRhOjptX3Byb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2YWx1ZSwgdm9pZD4gSklUOjplbWl0VmFs
dWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShPcCBieXRlY29kZSkKIHsKLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdCB7IHJlZ1QwIH07Ci0jZWxzZQotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdCB7IHJlZ1QxLCByZWdUMCB9OwotI2VuZGlmCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCBqc1JlZ1QxMCk7CiB9CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoLi4uKSB7IH0KQEAgLTM0OSwxMiArMzIy
LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKGNvbnN0IEJ5dGVj
b2RlJiBieXRlY29kZSwgSlNWYWx1ZVJlZ3MgdmEKICAgICAgICAgcmV0dXJuOwogCiAgICAgcHRy
ZGlmZl90IG9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5N
ZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKSArIHZhbHVlUHJvZmlsZU9mZnNldEZvcjxCeXRlY29kZT4o
bV9ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmly
c3RCdWNrZXQoKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0b3JlNjQodmFsdWUuZ3ByKCks
IEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgb2Zmc2V0KSk7Ci0jZWxzZQotICAgIHN0b3JlMzIodmFs
dWUucGF5bG9hZEdQUigpLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG9mZnNldCArIFBheWxvYWRP
ZmZzZXQpKTsKLSAgICBzdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCBBZGRyZXNzKHNfbWV0YWRhdGFH
UFIsIG9mZnNldCArIFRhZ09mZnNldCkpOwotI2VuZGlmCisgICAgc3RvcmVWYWx1ZSh2YWx1ZSwg
QWRkcmVzcyhzX21ldGFkYXRhR1BSLCBvZmZzZXQpKTsKIH0KIAogI2lmIFVTRShKU1ZBTFVFNjQp
CkBAIC0zOTUsNzkgKzM2Myw4NSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SW5pdFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QpCiAgICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRl
ZmluZWQoKSwgYWRkcmVzc0Zvcihkc3QpKTsKIH0KIAorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBk
c3QpCit7CisgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0
IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCisgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKKyAg
ICAgICAgaWYgKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRD
b2RlQmxvY2soc3JjKSkKKyAgICAgICAgICAgIG1vdmVWYWx1ZShtX3VubGlua2VkQ29kZUJsb2Nr
LT5nZXRDb25zdGFudChzcmMpLCBkc3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2Fk
Q29kZUJsb2NrQ29uc3RhbnQoc3JjLCBkc3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGxvYWRWYWx1ZShhZGRyZXNzRm9yKHNyYyksIGRzdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgSlNWYWx1
ZVJlZ3MgZnJvbSkKK3sKKyAgICBzdG9yZVZhbHVlKGZyb20sIGFkZHJlc3NGb3IoZHN0KSk7Cit9
CisKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIHRhZywgUmVn
aXN0ZXJJRCBwYXlsb2FkKQoreworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBKU1Zh
bHVlUmVncyB7IHRhZywgcGF5bG9hZCB9KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0
ZXJJRCBkc3QpCit7CisgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9k
IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBz
byB0aGF0IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCisgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkp
IHsKKyAgICAgICAgaWYgKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3RhbnRPd25lZEJ5VW5s
aW5rZWRDb2RlQmxvY2soc3JjKSkKKyAgICAgICAgICAgIG1vdmUoSW1tMzIobV91bmxpbmtlZENv
ZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKS5wYXlsb2FkKCkpLCBkc3QpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnRQYXlsb2FkKHNyYywgZHN0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBsb2FkMzIocGF5bG9hZEZvcihzcmMpLCBkc3QpOwor
fQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKFZp
cnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KQoreworICAgIEFTU0VSVChtX2J5dGVj
b2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhv
dC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0Lgor
ICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7CisgICAgICAgIGlmIChtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5pc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKHNyYykpCisgICAgICAgICAg
ICBtb3ZlKEltbTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYykudGFnKCkp
LCBkc3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnRU
YWcoc3JjLCBkc3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGxvYWQzMih0YWdGb3Io
c3JjKSwgZHN0KTsKK30KKyNlbGlmIFVTRShKU1ZBTFVFNjQpCitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVy
SUQgZHN0KQoreworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBKU1ZhbHVlUmVncyB7
IGRzdCB9KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdp
c3RlclBheWxvYWQoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpCit7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIEpTVmFsdWVSZWdzIHsgZHN0IH0pOworfQorCitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKK3sKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgSlNWYWx1ZVJlZ3MgeyBmcm9tIH0pOworfQorI2VuZGlmCisKKwogI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lz
dGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVlKQogewogICAgIGlmIChyZWcuaXNDb25zdGFudCgp
KSB7CisgICAgICAgIEFTU0VSVChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pc0NvbnN0YW50T3duZWRC
eVVubGlua2VkQ29kZUJsb2NrKHJlZykpOwogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IGluQ29uc3RhbnRQb29sID0gbV91bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3Rlcihy
ZWcpOwogICAgICAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJmluQ29uc3RhbnRQb29sKSwg
dmFsdWUpOwogICAgIH0gZWxzZQogICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3NGb3IocmVnKSwg
dmFsdWUpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKFZpcnR1YWxSZWdpc3Rl
ciByZWcsIFJlZ2lzdGVySUQgdGFnKQotewotICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7Ci0g
ICAgICAgIG1vdmUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKHJlZykudGFnKCkpLCB0YWcpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbG9hZDMyKHRhZ0ZvcihyZWcpLCB0YWcpOwot
fQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgcmVn
LCBSZWdpc3RlcklEIHBheWxvYWQpCi17Ci0gICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKLSAg
ICAgICAgbW92ZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQocmVnKS5wYXlsb2FkKCkpLCBwYXls
b2FkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGxvYWQzMihwYXlsb2FkRm9yKHJl
ZyksIHBheWxvYWQpOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkKGNvbnN0IEpTVmFs
dWUmIHYsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQpCi17Ci0gICAgbW92ZShJ
bW0zMih2LnBheWxvYWQoKSksIHBheWxvYWQpOwotICAgIG1vdmUoSW1tMzIodi50YWcoKSksIHRh
Zyk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyIHNyYywgSlNWYWx1ZVJlZ3MgZHN0KQotewotICAgIGVtaXRMb2FkKHNy
YywgZHN0LnRhZ0dQUigpLCBkc3QucGF5bG9hZEdQUigpKTsKLX0KLQotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBKU1Zh
bHVlUmVncyBmcm9tKQotewotICAgIGVtaXRTdG9yZShkc3QsIGZyb20udGFnR1BSKCksIGZyb20u
cGF5bG9hZEdQUigpKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZChWaXJ0dWFsUmVn
aXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklE
IGJhc2UpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQodGFnICE9IHBheWxvYWQpOwotCi0gICAgaWYg
KGJhc2UgPT0gY2FsbEZyYW1lUmVnaXN0ZXIpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQocGF5
bG9hZCAhPSBiYXNlKTsKLSAgICAgICAgZW1pdExvYWRQYXlsb2FkKHJlZywgcGF5bG9hZCk7Ci0g
ICAgICAgIGVtaXRMb2FkVGFnKHJlZywgdGFnKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmIChwYXlsb2FkID09IGJhc2UpIHsgLy8gYXZvaWQgc3RvbXBpbmcgYmFzZQotICAgICAg
ICBsb2FkMzIodGFnRm9yKHJlZywgYmFzZSksIHRhZyk7Ci0gICAgICAgIGxvYWQzMihwYXlsb2Fk
Rm9yKHJlZywgYmFzZSksIHBheWxvYWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
bG9hZDMyKHBheWxvYWRGb3IocmVnLCBiYXNlKSwgcGF5bG9hZCk7Ci0gICAgbG9hZDMyKHRhZ0Zv
cihyZWcsIGJhc2UpLCB0YWcpOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkMihWaXJ0
dWFsUmVnaXN0ZXIgcmVnMSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBW
aXJ0dWFsUmVnaXN0ZXIgcmVnMiwgUmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQy
KQotewotICAgIGVtaXRMb2FkKHJlZzIsIHRhZzIsIHBheWxvYWQyKTsKLSAgICBlbWl0TG9hZChy
ZWcxLCB0YWcxLCBwYXlsb2FkMSk7Ci19CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZp
cnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJl
Z2lzdGVySUQgYmFzZSkKIHsKQEAgLTQ4MiwxMyArNDU2LDYgQEAgaW5saW5lIHZvaWQgSklUOjpl
bWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxvYWQsIGJv
b2wgaW4KICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0
YWdGb3IocmVnKSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoVmlydHVh
bFJlZ2lzdGVyIHJlZywgVHJ1c3RlZEltbTMyIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyKQot
ewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsKLSAgICBpZiAoIWluZGV4
SXNJbnQzMikKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
LCB0YWdGb3IocmVnKSk7Ci19Ci0KIGlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQ2VsbChWaXJ0
dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0NlbGwpCiB7
CiAgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZykpOwpAQCAtNTAzLDExICs0NzAs
NiBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUJvb2woVmlydHVhbFJlZ2lzdGVyIHJlZywg
UmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZAogICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgdGFnRm9yKHJlZykpOwogfQogCi1pbmxpbmUgdm9pZCBK
SVQ6OmVtaXRTdG9yZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFs
dWUpCi17Ci0gICAgc3RvcmVEb3VibGUodmFsdWUsIGFkZHJlc3NGb3IocmVnKSk7Ci19Ci0KIGlu
bGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciByZWcsIGNvbnN0IEpTVmFs
dWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSkKIHsKICAgICBzdG9yZTMyKEltbTMyKGNvbnN0
YW50LnBheWxvYWQoKSksIHBheWxvYWRGb3IocmVnLCBiYXNlKSk7CkBAIC01NTMsNDQgKzUxNSw2
IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFs
UmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0CiAKICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQp
CiAKLS8vIGdldCBhcmcgcHV0cyBhbiBhcmcgZnJvbSB0aGUgU0YgcmVnaXN0ZXIgYXJyYXkgaW50
byBhIGgvdyByZWdpc3RlcgotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKLXsKLSAgICBBU1NF
UlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4
IGlzIHNldC4KLQotICAgIGlmIChzcmMuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIGlmIChtX3By
b2ZpbGVkQ29kZUJsb2NrLT5pc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKHNyYykp
IHsKLSAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRD
b25zdGFudChzcmMpOwotICAgICAgICAgICAgbW92ZShJbW02NChKU1ZhbHVlOjplbmNvZGUodmFs
dWUpKSwgZHN0KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29u
c3RhbnQoc3JjLCBkc3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbG9hZDY0KGFk
ZHJlc3NGb3Ioc3JjKSwgZHN0KTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBkc3QpCi17
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIGRzdC5wYXlsb2FkR1BSKCkpOwotfQot
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhWaXJ0dWFs
UmVnaXN0ZXIgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiwgUmVn
aXN0ZXJJRCBkc3QyKQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgZHN0MSk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyKTsKLX0KLQotQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0
LCBSZWdpc3RlcklEIGZyb20pCi17Ci0gICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGRzdCkp
OwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZp
cnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCi17Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIGZyb20ucGF5bG9hZEdQUigpKTsKLX0KLQogQUxXQVlTX0lOTElORSBK
SVQ6Okp1bXAgSklUOjplbWl0SnVtcElmQm90aEpTQ2VsbHMoUmVnaXN0ZXJJRCByZWcxLCBSZWdp
c3RlcklEIHJlZzIsIFJlZ2lzdGVySUQgc2NyYXRjaCkKIHsKICAgICBtb3ZlKHJlZzEsIHNjcmF0
Y2gpOwpAQCAtNzI1LDE0ICs2NDksMzQgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZEds
b2JhbE9iamVjdChHUFJSZWcgcmVzdWx0KQogICAgIGxvYWRDb25zdGFudChtX2dsb2JhbE9iamVj
dENvbnN0YW50LCByZXN1bHQpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkQ29k
ZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIGNvbnN0YW50LCBHUFJSZWcgcmVzdWx0KQor
QUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBsb2FkQWRkck9mQ29kZUJsb2NrQ29uc3RhbnRCdWZm
ZXIoSklUICZqaXQsIEdQUlJlZyBkc3QpCit7CisgICAgaml0LmxvYWRQdHIoaml0LmFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgZHN0KTsKKyAgICBqaXQubG9hZFB0cihKSVQ6
OkFkZHJlc3MoZHN0LCBDb2RlQmxvY2s6Om9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKCkp
LCBkc3QpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkQ29kZUJsb2NrQ29uc3Rh
bnQoVmlydHVhbFJlZ2lzdGVyIGNvbnN0YW50LCBKU1ZhbHVlUmVncyBkc3QpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoY29uc3RhbnQuaXNDb25zdGFudCgpKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVzdWx0KTsKLSAgICBsb2FkUHRyKEFkZHJl
c3MocmVzdWx0LCBDb2RlQmxvY2s6Om9mZnNldE9mQ29uc3RhbnRzVmVjdG9yQnVmZmVyKCkpLCBy
ZXN1bHQpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIGNvbnN0YW50LnRvQ29uc3RhbnRJ
bmRleCgpICogc2l6ZW9mKHZvaWQqKSksIHJlc3VsdCk7CisgICAgbG9hZEFkZHJPZkNvZGVCbG9j
a0NvbnN0YW50QnVmZmVyKCp0aGlzLCBkc3QucGF5bG9hZEdQUigpKTsKKyAgICBsb2FkVmFsdWUo
QWRkcmVzcyhkc3QucGF5bG9hZEdQUigpLCBjb25zdGFudC50b0NvbnN0YW50SW5kZXgoKSAqIHNp
emVvZihSZWdpc3RlcikpLCBkc3QpOwogfQogCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKK0FMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudFBheWxvYWQoVmlydHVhbFJl
Z2lzdGVyIGNvbnN0YW50LCBSZWdpc3RlcklEIGRzdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChj
b25zdGFudC5pc0NvbnN0YW50KCkpOworICAgIGxvYWRBZGRyT2ZDb2RlQmxvY2tDb25zdGFudEJ1
ZmZlcigqdGhpcywgZHN0KTsKKyAgICBsb2FkMzIoQWRkcmVzcyhkc3QsIGNvbnN0YW50LnRvQ29u
c3RhbnRJbmRleCgpICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpLCBkc3QpOwor
fQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvZGVCbG9ja0NvbnN0YW50VGFnKFZpcnR1
YWxSZWdpc3RlciBjb25zdGFudCwgUmVnaXN0ZXJJRCBkc3QpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQoY29uc3RhbnQuaXNDb25zdGFudCgpKTsKKyAgICBsb2FkQWRkck9mQ29kZUJsb2NrQ29uc3Rh
bnRCdWZmZXIoKnRoaXMsIGRzdCk7CisgICAgbG9hZDMyKEFkZHJlc3MoZHN0LCBjb25zdGFudC50
b0NvbnN0YW50SW5kZXgoKSAqIHNpemVvZihSZWdpc3RlcikgKyBUYWdPZmZzZXQpLCBkc3QpOwor
fQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmluZGV4IGY4NDQ1ODc4MDNj
MjYxOGM2ODAzOTgzNmNlZTZjN2IzNGZkMmMzMDQuLmMzMjQwYjhmZjRiOGUxYzBlYWExMzJiMGU4
YjM4ODYxMmU2Y2E2YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cApAQCAtNDUsOCArNDUsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotI2lmIFVTRShKU1ZBTFVF
NjQpCi0KIHZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTW92PigpOwpAQCAtNTUsMjYgKzUzLDIzIEBAIHZvaWQgSklUOjplbWl0X29wX21vdihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgaWYgKHNyYy5pc0NvbnN0
YW50KCkpIHsKICAgICAgICAgaWYgKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3RhbnRPd25l
ZEJ5VW5saW5rZWRDb2RlQmxvY2soc3JjKSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0gICAgICAgICAgICBzdG9y
ZTY0KEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOworICAg
ICAgICAgICAgc3RvcmVWYWx1ZShtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMp
LCBhZGRyZXNzRm9yKGRzdCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbG9hZENv
ZGVCbG9ja0NvbnN0YW50KHNyYywgcmVnVDApOwotICAgICAgICAgICAgc3RvcmU2NChyZWdUMCwg
YWRkcmVzc0Zvcihkc3QpKTsKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMs
IGpzUmVnVDEwKTsKKyAgICAgICAgICAgIHN0b3JlVmFsdWUoanNSZWdUMTAsIGFkZHJlc3NGb3Io
ZHN0KSk7CiAgICAgICAgIH0KLQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbG9hZDY0
KGFkZHJlc3NGb3Ioc3JjKSwgcmVnVDApOwotICAgIHN0b3JlNjQocmVnVDAsIGFkZHJlc3NGb3Io
ZHN0KSk7CisgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3Ioc3JjKSwganNSZWdUMTApOworICAgIHN0
b3JlVmFsdWUoanNSZWdUMTAsIGFkZHJlc3NGb3IoZHN0KSk7CiB9CiAKLQogdm9pZCBKSVQ6OmVt
aXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbmQ+KCk7Ci0gICAgUkVM
RUFTRV9BU1NFUlQocmV0dXJuVmFsdWVHUFIgIT0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVHUFIpOwor
ICAgIHN0YXRpY19hc3NlcnQoIXJldHVyblZhbHVlSlNSLnVzZXMoY2FsbEZyYW1lUmVnaXN0ZXIp
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJldHVyblZh
bHVlSlNSKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoKTsKICAgICByZXQoKTsKQEAgLTg3LDYgKzgyLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfam1wKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkSnVt
cChqdW1wKCksIHRhcmdldCk7CiB9CiAKKwogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwpAQCAtMTA1LDcgKzEw
MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0
dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CiAgICAgZW1pdEluaXRp
YWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAgICAgbXV0YXRvckZl
bmNlKCptX3ZtKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsK
KyAgICBib3hDZWxsKHJlc3VsdFJlZywganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QsIGpzUmVnVDEwKTsKIAogICAgIGFkZFNsb3dDYXNlKHNsb3dD
YXNlcyk7CiB9CkBAIC0xMTksOSArMTE2LDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdf
b2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGNhbGxPcGVy
YXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVy
ZVJlZyk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBib3hD
ZWxsKHJldHVyblZhbHVlR1BSLCByZXR1cm5WYWx1ZUpTUik7CisgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlSlNSKTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCisK
IHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hhc0luc3RhbmNlPigpOwpAQCAtMjEwLDEyICsyMTAs
NiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2Vv
Zl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQotewotICAgIC8vIFRoaXMgYWx3YXlzIGdvZXMg
dG8gc2xvdyBwYXRoIHNpbmNlIHdlIGV4cGVjdCBpdCB0byBiZSByYXJlLgotICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSk7Ci19Ci0gICAgCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0eT4oKTsKQEAgLTIyOSwzMyArMjIzLDM5IEBA
IHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCisjZW5kaWYK
Kwogdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGpzUmVnVDEwKTsKKyAgICBKdW1wIGlzQ2VsbCA9IGJy
YW5jaElmQ2VsbChqc1JlZ1QxMCk7CiAKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdUMCk7CisjaWYgVVNFKEpTVkFM
VUU2NCkKKyAgICBjb21wYXJlNjQoRXF1YWwsIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOworI2VsaWYgVVNFKEpTVkFM
VUUzMl82NCkKKyAgICBjb21wYXJlMzIoRXF1YWwsIGpzUmVnVDEwLnRhZ0dQUigpLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOworI2VuZGlmCiAgICAgSnVtcCBk
b25lID0ganVtcCgpOwogICAgIAogICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOworICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJh
bmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwogICAgIEp1bXAgbm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKIAogICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdU
MSwgcmVnVDIpOworICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGpzUmVnVDEwLnBheWxvYWRH
UFIoKSwgcmVnVDEsIHJlZ1QyKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBy
ZWdUMSk7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CiAKICAg
ICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAgICAgZG9uZS5saW5rKHRo
aXMpOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVn
VDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtMjY0LDE1ICsyNjQsMTcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIGpzUmVnVDEwKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgZW1pdFR1cm5VbmRlZmluZWRJ
bnRvTnVsbChqc1JlZ1QxMCk7CisgICAgaXNOdWxsKGpzUmVnVDEwLCByZWdUMCk7CiAKLSAgICBi
b3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBib3hCb29sZWFuKHJlZ1QwLCBqc1JlZ1QxMCk7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGpzUmVnVDEwKTsKIH0KIAorI2lmIFVTRShKU1ZB
TFVFNjQpCisKIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsKQEAgLTQxOCwxNSArNDIwLDI1IEBAIHZvaWQgSklU
OjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKKyNlbmRp
ZgorCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgYXJndW1lbnRHUFIxKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgYXJndW1lbnRHUFIyKTsKLSAgICBsb2FkR2xv
YmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRG
dW5jdGlvbk5hbWUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwor
CisgICAgdXNpbmcgU2xvd09wZXJhdGlvbiA9IGRlY2x0eXBlKG9wZXJhdGlvblNldEZ1bmN0aW9u
TmFtZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJyZWRB
cmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZnVu
Y3Rpb25HUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAxPigpOworICAg
IGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBuYW1lSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xv
d09wZXJhdGlvbiwgMj4oKTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5
dGVjb2RlLm1fZnVuY3Rpb24sIGZ1bmN0aW9uR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fbmFtZSwgbmFtZUpTUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9i
YWxPYmplY3RHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1l
LCBnbG9iYWxPYmplY3RHUFIsIGZ1bmN0aW9uR1BSLCBuYW1lSlNSKTsKIH0KIAorI2lmIFVTRShK
U1ZBTFVFNjQpCisKIHZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTm90PigpOwpAQCAtNDQyLDIxICs0NTQsMjQgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAKKyNlbmRpZgorCiB2b2lkIEpJVDo6
ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpmYWxzZT4oKTsK
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVn
VDA7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHZhbHVlID0ganNSZWdUMTA7CiAKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEg
PSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgY29u
c3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdUMzsKKyAgICBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2gxID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJl
Z1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7CisgICAg
c3RhdGljX2Fzc2VydChub092ZXJsYXAodmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZ2xvYmFs
T2JqZWN0R1BSKSk7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gdHJ1ZTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7
Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNj
cmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOworICAgIGFkZEp1bXAoYnJh
bmNoSWZGYWxzZXkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBS
ZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIp
LCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIo
dmFsdWVJc0ZhbHNleUdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBh
ZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC00NzMsNiAr
NDg4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnZhbHVl
SXNGYWxzZXlHZW5lcmF0b3IoVk0mIHZtKQogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBj
b25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgc3RhdGljX2Fzc2VydCh2YWx1ZSA9
PSBqc1JlZ1QxMC5wYXlsb2FkR1BSKCkpOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEg
PSByZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CiAgICAgY29u
c3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKQEAg
LTUwMyw0OCArNTE5LDUxIEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5
dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywganNSZWdUMTAp
OworICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoanNSZWdUMTApOwogCiAg
ICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBl
SW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkp
OwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAg
IEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRk
cmVzcyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICBlbWl0TG9hZFN0
cnVjdHVyZSh2bSgpLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIHJlZ1QyLCByZWdUMSk7CiAgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFk
ZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRh
cmdldCk7CiAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAo
KTsKIAogICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAm
IG51bGwKICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJbW0z
Mih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0
YXJnZXQpOyAgICAgICAgICAgIAorICAgIGVtaXRUdXJuVW5kZWZpbmVkSW50b051bGwoanNSZWdU
MTApOworICAgIGFkZEp1bXAoYnJhbmNoSWZOdWxsKGpzUmVnVDEwKSwgdGFyZ2V0KTsKIAogICAg
IGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogICAgIG1hc3F1ZXJhZGVz
R2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7Ci19OworfQorCiB2b2lkIEpJVDo6ZW1p
dF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxsPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0g
ICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIGpzUmVnVDEwKTsKKyAgICBKdW1wIGlzSW1tZWRpYXRlID0g
YnJhbmNoSWZOb3RDZWxsKGpzUmVnVDEwKTsKIAogICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxs
IGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVy
ZS4KLSAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKSwgdGFyZ2V0KTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIs
IHJlZ1QxKTsKKyAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MoanNSZWdUMTAu
cGF5bG9hZEdQUigpLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7CisgICAgZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwganNSZWdUMTAucGF5bG9hZEdQUigpLCByZWdUMiwgcmVnVDEpOwogICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRy
ZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJn
ZXQpOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwogCiAgICAgLy8gTm93IGhh
bmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAogICAgIGlzSW1tZWRp
YXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAg
ICAgCisgICAgZW1pdFR1cm5VbmRlZmluZWRJbnRvTnVsbChqc1JlZ1QxMCk7CisgICAgYWRkSnVt
cChicmFuY2hJZk5vdE51bGwoanNSZWdUMTApLCB0YXJnZXQpOwogCiAgICAgd2FzTm90SW1tZWRp
YXRlLmxpbmsodGhpcyk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorCiB2b2lkIEpJVDo6ZW1p
dF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp1
bmRlZmluZWRPck51bGw+KCk7CkBAIC01NzYsNyArNTk1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
amVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0g
ICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJlZ1Qx
KTsKKyAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwg
SlNWYWx1ZVJlZ3MgeyByZWdUMSB9KTsKICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgcmVn
VDAsIHJlZ1QxKSwgdGFyZ2V0KTsKIH0KIApAQCAtNTg3LDcgKzYwNiw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMCk7Ci0gICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KGJ5dGVjb2RlLm1fc3BlY2lhbFBv
aW50ZXIsIHJlZ1QxKTsKKyAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoYnl0ZWNvZGUubV9zcGVj
aWFsUG9pbnRlciwgSlNWYWx1ZVJlZ3MgeyByZWdUMSB9KTsKICAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSk7CiAgICAgc3RvcmU4VG9N
ZXRhZGF0YShUcnVzdGVkSW1tMzIoMSksIGJ5dGVjb2RlLCBPcEpuZXFQdHI6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkhhc0p1bXBlZCgpKTsKICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKQEAgLTU5
Nyw3ICs2MTYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5
dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1Qx
LCByZWdUMCwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVn
VDAgfSk7CkBAIC02MDgsMjYgKzYyOCwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29k
ZS5tX3JocywgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9s
aHMsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcmhzLCBy
ZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIp
OwogICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CiB9
CiAKKyNlbmRpZgorCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSnRydWU+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgY29uc3Rl
eHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyB2YWx1
ZSA9IGpzUmVnVDEwOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Nv
bmRpdGlvbiwgdmFsdWUpOwogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoMiA9IHJlZ1QyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVn
VDM7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9i
amVjdEdQUiA9IHJlZ1Q0OworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKHZhbHVlLCBzY3Jh
dGNoMSwgc2NyYXRjaDIsIGdsb2JhbE9iamVjdEdQUikpOwogICAgIGNvbnN0ZXhwciBib29sIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAgICAgbG9hZEdsb2JhbE9i
amVjdChnbG9iYWxPYmplY3RHUFIpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwg
SlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEs
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFy
Z2V0KTsKKyAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZtKCksIHZhbHVlLCBzY3JhdGNoMSwg
c2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNlbHNlCiAgICAgZW1pdE5ha2VkTmVh
ckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0aHlHZW5lcmF0b3IpLnJldGFnZ2VkQ29k
ZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDAp
LCB0YXJnZXQpOwpAQCAtNjQ0LDYgKzY2OCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjp2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJiB2bSkKICAgICBDQ2Fs
bEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAg
IHN0YXRpY19hc3NlcnQodmFsdWUgPT0ganNSZWdUMTAucGF5bG9hZEdQUigpKTsKICAgICBjb25z
dGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoMiA9IHJlZ1QyOwogICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCA9IHRydWU7CkBAIC02NjgsMTAgKzY5MywxMyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6dmFsdWVJc1RydXRoeUdlbmVyYXRvcihWTSYgdm0p
CiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKKyNpZiBVU0UoSlNWQUxV
RTY0KQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcE5lcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywg
cmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2xocywgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAs
IHJlZ1QxLCByZWdUMik7CiAgICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJl
Z1QwKTsKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwpAQCAt
NjgzLDIxICs3MTEsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3Jocywg
cmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9saHMsIHJlZ1Qw
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CiAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGFk
ZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CiB9CiAKKyNl
bmRpZgorCiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVGhyb3c+KCk7Ci0gICAgQVNTRVJUKHJlZ1QwID09IHJldHVyblZhbHVlR1BSKTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KHJlZ1QwID09IHJldHVyblZhbHVlR1BSKTsKIAogI2lmICFFTkFCTEUo
RVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOwotICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEp
OwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCByZWdU
MSwgcmVnVDApOworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25U
aHJvdyk7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJyZWRB
cmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVn
cyB2YWx1ZUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDE+KCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCB2YWx1ZUpTUik7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGNhbGxPcGVyYXRpb25O
b0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBnbG9iYWxPYmplY3RHUFIsIHZhbHVlSlNS
KTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwogI2Vsc2UKICAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1lbnRHUFIyOwpAQCAtNzQwLDYgKzc3
NCw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpvcF90aHJv
d19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIH0KICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
dm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CkBAIC03NDgsNyArNzg0LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmlj
dEVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9
IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVn
VDAsIHNyYzIsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1Qw
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIHJlZ1QxKTsKIAogI2lmIFVTRShC
SUdJTlQzMikKICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0
byBiZSBTdHJpY3RFcSk6CkBAIC04MzMsNyArODcwLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0
cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHNyYzIgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNy
YzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMx
LCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCByZWdUMSk7CiAKICNp
ZiBVU0UoQklHSU5UMzIpCiAgICAgLyogQXQgYSBoaWdoIGxldmVsIHdlIGRvIChhc3N1bWluZyAn
dHlwZScgdG8gYmUgU3RyaWN0RXEpOgpAQCAtMTA0OCw2ICsxMDg2LDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3BhcmVudF9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3QsIHJlZ1QwKTsKIH0KIAorI2Vu
ZGlmCisKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFN3aXRjaEltbT4oKTsKQEAgLTEwNjEsMTYgKzExMDEsMTcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVj
b2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7CiAgICAg
bGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGF1dG8gbm90SW50MzIgPSBi
cmFuY2hJZk5vdEludDMyKHJlZ1QwKTsKLSAgICBzdWIzMihJbW0zMih1bmxpbmtlZFRhYmxlLm1f
bWluKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBqc1Jl
Z1QxMCk7CisgICAgYXV0byBub3RJbnQzMiA9IGJyYW5jaElmTm90SW50MzIoanNSZWdUMTApOwor
ICAgIHN1YjMyKEltbTMyKHVubGlua2VkVGFibGUubV9taW4pLCBqc1JlZ1QxMC5wYXlsb2FkR1BS
KCkpOwogCi0gICAgYWRkSnVtcChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QwLCBJbW0zMihs
aW5rZWRUYWJsZS5tX2N0aU9mZnNldHMuc2l6ZSgpKSksIGRlZmF1bHRPZmZzZXQpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihsaW5rZWRUYWJsZS5tX2N0aU9mZnNldHMuZGF0YSgpKSwgcmVnVDEp
OwotICAgIGZhckp1bXAoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgU2NhbGVQdHIpLCBKU1N3aXRj
aFB0clRhZyk7CisgICAgYWRkSnVtcChicmFuY2gzMihBYm92ZU9yRXF1YWwsIGpzUmVnVDEwLnBh
eWxvYWRHUFIoKSwgSW1tMzIobGlua2VkVGFibGUubV9jdGlPZmZzZXRzLnNpemUoKSkpLCBkZWZh
dWx0T2Zmc2V0KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobGlua2VkVGFibGUubV9jdGlPZmZz
ZXRzLmRhdGEoKSksIHJlZ1QyKTsKKyAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMiwganNSZWdU
MTAucGF5bG9hZEdQUigpLCBTY2FsZVB0ciksIHJlZ1QyKTsKKyAgICBmYXJKdW1wKHJlZ1QyLCBK
U1N3aXRjaFB0clRhZyk7CiAKICAgICBub3RJbnQzMi5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVy
YXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlw
ZSwgJnZtKCksIHJlZ1QwLCB0YWJsZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKKyAgICBj
YWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93
bktleVR5cGUsICZ2bSgpLCBqc1JlZ1QxMCwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21p
bik7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQogCkBA
IC0xMDg5LDkgKzExMzAsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBtX3N3aXRjaGVzLmFwcGVuZChT
d2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBT
d2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxl
KHVubGlua2VkVGFibGUpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUs
IGFyZ3VtZW50R1BSMSk7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgYXJn
dW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIHRhYmxlSW5kZXgsIHVubGlua2VkVGFibGUubV9taW4p
OworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25Td2l0Y2hDaGFy
V2l0aFVua25vd25LZXlUeXBlKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQ
UiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3Rl
eHByIEpTVmFsdWVSZWdzIHNjcnV0aW5lZUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dP
cGVyYXRpb24sIDE+KCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwg
c2NydXRpbmVlSlNSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCBn
bG9iYWxPYmplY3RHUFIsIHNjcnV0aW5lZUpTUiwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5t
X21pbik7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwogfQog
CkBAIC0xMTA4LDkgKzExNTMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIG1fc3dpdGNoZXMuYXBw
ZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZz
ZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFi
bGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5l
ZSwgYXJndW1lbnRHUFIxKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUs
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUluZGV4KTsKKyAgICB1c2luZyBTbG93
T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlU
eXBlKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFy
Z3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdz
IHNjcnV0aW5lZUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDE+KCk7
CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgc2NydXRpbmVlSlNSKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIGdsb2JhbE9iamVjdEdQ
Uiwgc2NydXRpbmVlSlNSLCB0YWJsZUluZGV4KTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BS
LCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKQEAgLTExMjAsMTUgKzExNjksMTUgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwganNSZWdUMTApOwor
ICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoanNSZWdUMTApOwogCi0gICAg
SnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGpzUmVnVDEwLnBheWxvYWRHUFIoKSwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCkpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CiAgICAgSnVt
cCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwogCiAgICAgaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwg
cmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwganNSZWdU
MTAucGF5bG9hZEdQUigpLCByZWdUMiwgcmVnVDEpOwogICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJl
Z1QwKTsKQEAgLTExMzYsMTQgKzExODUsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgaXNJbW1lZGlhdGUu
bGluayh0aGlzKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVk
VGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgZW1pdFR1cm5VbmRlZmluZWRJbnRvTnVs
bChqc1JlZ1QxMCk7CisgICAgaXNOdWxsKGpzUmVnVDEwLCByZWdUMCk7CiAKICAgICB3YXNOb3RJ
bW1lZGlhdGUubGluayh0aGlzKTsKICAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxp
bmsodGhpcyk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0p
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBib3hCb29sZWFuKHJlZ1Qw
LCBqc1JlZ1QxMCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGpzUmVnVDEwKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTExNTIsMTUgKzEyMDEsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YzEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIGpzUmVnVDEwKTsKKyAgICBKdW1w
IGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGpzUmVnVDEwKTsKIAotICAgIEp1bXAgaXNN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOworICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJh
bmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwogICAgIEp1bXAgd2FzTm90
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKIAogICAgIGlzTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCBy
ZWdUMiwgcmVnVDEpOworICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGpzUmVnVDEwLnBheWxv
YWRHUFIoKSwgcmVnVDIsIHJlZ1QxKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZWdUMik7CiAgICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7
CkBAIC0xMTY4LDE2ICsxMjE3LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICBpc0ltbWVkaWF0ZS5saW5r
KHRoaXMpOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcp
LCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICBlbWl0VHVyblVuZGVmaW5lZEludG9OdWxs
KGpzUmVnVDEwKTsKKyAgICBpc05vdE51bGwoanNSZWdUMTAsIHJlZ1QwKTsKIAogICAgIHdhc05v
dEltbWVkaWF0ZS5saW5rKHRoaXMpOwogICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGJveEJvb2xlYW4ocmVn
VDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTAp
OwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKwogdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29u
c3QgSW5zdHJ1Y3Rpb24qKQogewogICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0
aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudApAQCAtMTMwNCwxNiArMTM1NSwxOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOwogfQogCisjZW5kaWYKKwog
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
VG9UaGlzPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3Qs
IHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCBq
c1JlZ1QxMCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOworICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChqc1JlZ1QxMCk7CiAKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0VHlwZSkpOworICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90VHlwZShqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEZpbmFsT2JqZWN0VHlw
ZSkpOwogICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BUb1RoaXM6Ok1ldGFkYXRh
OjpvZmZzZXRPZkNhY2hlZFN0cnVjdHVyZUlEKCksIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDIpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVz
cyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMzI4LDcgKzEzODEsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIFJlZ2lzdGVySUQgY2FjaGVkRnVuY3Rpb25SZWcgPSByZWdUNDsKICAgICBSZWdpc3Rl
cklEIHNjcmF0Y2hSZWcgPSByZWdUMzsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2Fs
bGVlLCBjYWxsZWVSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGNhbGxl
ZSwgY2FsbGVlUmVnKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxl
ZVJlZykpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNl
dE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnLCBUcnVzdGVkSW1tMzIoSlNGdW5jdGlv
bjo6cmFyZURhdGFUYWcpKSk7CkBAIC0xMzQ3LDkgKzE0MDAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKICAg
ICBtdXRhdG9yRmVuY2UoKm1fdm0pOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgYm94Q2VsbChyZXN1
bHRSZWcsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0LCBqc1JlZ1QxMCk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorCiB2b2lkIEpJVDo6ZW1p
dF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6Pigp
OwpAQCAtMTQwNSw2ICsxNDYxLDE0IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzCiAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKIH0KIAorI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCisKK3ZvaWQgSklUOjplbWl0X29wX2lu
c3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikKK3sKKyAgICAvLyBUaGlzIGFsd2F5
cyBnb2VzIHRvIHNsb3cgcGF0aCBzaW5jZSB3ZSBleHBlY3QgaXQgdG8gYmUgcmFyZS4KKyAgICBh
ZGRTbG93Q2FzZShqdW1wKCkpOworfQorCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2Vv
Zl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwpAQCAtMTQxNSwxNiArMTQ3OSwyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFu
Y2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVgogICAg
IFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3Rh
bmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0
YW5jZVZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwotICAgIGxvYWRHbG9iYWxPYmplY3Qo
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3Rh
bmNlT2ZDdXN0b20sIEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIx
LCBHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7Ci0gICAgYm94
Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQorICAg
IHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9t
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3Vt
ZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHZh
bHVlSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICBj
b25zdGV4cHIgR1BSUmVnIGNvbnN0cnVjdG9yR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xv
d09wZXJhdGlvbiwgMj4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgaGFzSW5zdGFuY2VW
YWx1ZUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDM+KCk7CiAKLSNl
bmRpZiAvLyBVU0UoSlNWQUxVRTY0KQorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHZhbHVlSlNSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChjb25zdHJ1Y3Rv
ciwgY29uc3RydWN0b3JHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFu
Y2VWYWx1ZSwgaGFzSW5zdGFuY2VWYWx1ZUpTUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9i
YWxPYmplY3RHUFIpOworICAgIGNhbGxPcGVyYXRpb24oCisgICAgICAgIG9wZXJhdGlvbkluc3Rh
bmNlT2ZDdXN0b20sCisgICAgICAgIGdsb2JhbE9iamVjdEdQUiwgdmFsdWVKU1IsIGNvbnN0cnVj
dG9yR1BSLCBoYXNJbnN0YW5jZVZhbHVlSlNSKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVl
R1BSLCByZXR1cm5WYWx1ZUpTUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
dHVyblZhbHVlSlNSKTsKK30KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKQEAgLTE0NDMsMTQgKzE1MTMsOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQog
ICAgICAgICBsb2FkUHRyKHB0ciwgcmVnVDApOwogICAgICAgICBhdXRvIHNraXBFYXJseVJldHVy
biA9IGJyYW5jaFB0cihCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW1QdHIoT3B0aW9uczo6ZWFybHlS
ZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpKTsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwot
ICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlc3VsdFJlZ3MuZ3ByKCkpOwotI2Vsc2UKLSAgICAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZXN1bHRSZWdz
LnBheWxvYWRHUFIoKSk7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKLSNlbmRpZgorICAgICAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJldHVyblZhbHVlSlNSLnBheWxvYWRHUFIoKSk7CisgICAgICAgIGJveENlbGwocmV0dXJu
VmFsdWVKU1IucGF5bG9hZEdQUigpLCByZXR1cm5WYWx1ZUpTUik7CisKICAgICAgICAgY2hlY2tT
dGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OwogICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwpAQCAtMTU4OCwxMSArMTY1Myw3IEBA
IHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKIAotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3Bl
LCBhcmd1bWVudEdQUjEpOwotI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9z
Y29wZSwgYXJndW1lbnRHUFIxKTsKLSNlbmRpZgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQ
YXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAgICAgYXV0byBjb25zdGFu
dCA9IGFkZFRvQ29uc3RhbnRQb29sKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25EZWNs
LCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9m
dW5jdGlvbkRlY2wpKSk7CiAgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVudEdQUjIp
OwogCkBAIC0xNjM0LDEyICsxNjk1LDggQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1v
bihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKLSNlbHNlCi0g
ICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7Ci0jZW5k
aWYKIAorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUs
IGFyZ3VtZW50R1BSMSk7CiAgICAgYXV0byBjb25zdGFudCA9IGFkZFRvQ29uc3RhbnRQb29sKEpJ
VENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25FeHByLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0
YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7CiAgICAgbG9h
ZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVudEdQUjIpOwogICAgIE9wY29kZUlEIG9wY29kZUlE
ID0gT3A6Om9wY29kZUlEOwpAQCAtMTY5MywyMCArMTc1MCwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJh
eVdpdGhTaXplPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7Ci0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6
ZUluZGV4LCBhcmd1bWVudEdQUjIpOwotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxl
LCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBhcmd1bWVudEdQUjIpOwotI2Vsc2UK
LSAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlX
aXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCByZWdU
Mik7Ci0gICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOwotICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRo
U2l6ZUFuZFByb2ZpbGUsIGRzdCwgcmVnVDMsIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApKTsKLSNlbmRpZgotfQogCi0jaWYgVVNFKEpTVkFMVUU2NCkKKyAgICB1c2luZyBPcGVyYXRp
b24gPSBkZWNsdHlwZShvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxP
cGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEdQUlJlZyBwcm9maWxlR1BSID0gcHJlZmVy
cmVkQXJndW1lbnRHUFI8T3BlcmF0aW9uLCAxPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVn
cyBzaXplSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8T3BlcmF0aW9uLCAyPigpOworCisgICAg
bWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcE5ld0FycmF5V2l0aFNp
emU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlvblByb2ZpbGUoKSwgcHJvZmlsZUdQ
Uik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHNpemVKU1IpOworICAg
IGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIGdsb2JhbE9iamVjdEdQUiwg
cHJvZmlsZUdQUiwgc2l6ZUpTUik7Cit9CiAKIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlw
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewpAQCAtMTcxNyw1NiAr
MTc3MSw1NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2Nh
dGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIGpzUmVnVDEwKTsKIAogICAgIEp1bXBMaXN0
IGp1bXBUb0VuZDsKIAotICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkp
OworICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZFbXB0eShqc1JlZ1QxMCkpOwogCiAgICAg
Ly8gQ29tcGlsZSBpbiBhIHByZWRpY3RpdmUgdHlwZSBjaGVjaywgaWYgcG9zc2libGUsIHRvIHNl
ZSBpZiB3ZSBjYW4gc2tpcCB3cml0aW5nIHRvIHRoZSBsb2cuCiAgICAgLy8gVGhlc2UgdHlwZWNo
ZWNrcyBhcmUgaW5saW5lZCB0byBtYXRjaCB0aG9zZSBvZiB0aGUgNjQtYml0IEpTVmFsdWUgdHlw
ZSBjaGVja3MuCiAgICAgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0g
VHlwZVVuZGVmaW5lZCkKLSAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZlVuZGVmaW5l
ZChyZWdUMCkpOworICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmVW5kZWZpbmVkKGpz
UmVnVDEwKSk7CiAgICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlw
ZSA9PSBUeXBlTnVsbCkKLSAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZk51bGwocmVn
VDApKTsKKyAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZk51bGwoanNSZWdUMTApKTsK
ICAgICBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVC
b29sZWFuKQotICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmQm9vbGVhbihyZWdUMCwg
cmVnVDEpKTsKKyAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZkJvb2xlYW4oanNSZWdU
MTAsIHJlZ1QyKSk7CiAgICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVu
VHlwZSA9PSBUeXBlQW55SW50KQotICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmSW50
MzIocmVnVDApKTsKKyAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZkludDMyKGpzUmVn
VDEwKSk7CiAgICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9
PSBUeXBlTnVtYmVyKQotICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmTnVtYmVyKHJl
Z1QwKSk7CisgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZOdW1iZXIoanNSZWdUMTAs
IHJlZ1QyKSk7CiAgICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlw
ZSA9PSBUeXBlU3RyaW5nKSB7Ci0gICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKTsKLSAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZlN0cmluZyhyZWdU
MCkpOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChqc1JlZ1QxMCk7
CisgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZTdHJpbmcoanNSZWdUMTAucGF5bG9h
ZEdQUigpKSk7CiAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwogICAgIH0KIAogICAgIC8v
IExvYWQgdGhlIHR5cGUgcHJvZmlsaW5nIGxvZyBpbnRvIFQyLgogICAgIFR5cGVQcm9maWxlckxv
ZyogY2FjaGVkVHlwZVByb2ZpbGVyTG9nID0gbV92bS0+dHlwZVByb2ZpbGVyTG9nKCk7CiAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVQcm9maWxlckxvZyksIHJlZ1QyKTsKLSAgICAv
LyBMb2FkIHRoZSBuZXh0IGxvZyBlbnRyeSBpbnRvIFQxLgotICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMiwgVHlwZVByb2ZpbGVyTG9nOjpjdXJyZW50TG9nRW50cnlPZmZzZXQoKSksIHJlZ1QxKTsK
KyAgICAvLyBMb2FkIHRoZSBuZXh0IGxvZyBlbnRyeSBpbnRvIFQzLgorICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMiwgVHlwZVByb2ZpbGVyTG9nOjpjdXJyZW50TG9nRW50cnlPZmZzZXQoKSksIHJl
Z1QzKTsKIAogICAgIC8vIFN0b3JlIHRoZSBKU1ZhbHVlIG9udG8gdGhlIGxvZyBlbnRyeS4KLSAg
ICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5
Ojp2YWx1ZU9mZnNldCgpKSk7CisgICAgc3RvcmVWYWx1ZShqc1JlZ1QxMCwgQWRkcmVzcyhyZWdU
MywgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6dmFsdWVPZmZzZXQoKSkpOwogCi0gICAgLy8g
U3RvcmUgdGhlIHN0cnVjdHVyZUlEIG9mIHRoZSBjZWxsIGlmIFQwIGlzIGEgY2VsbCwgb3RoZXJ3
aXNlLCBzdG9yZSAwIG9uIHRoZSBsb2cgZW50cnkuCi0gICAgSnVtcCBub3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwotICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVn
VDEsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAg
ICAvLyBTdG9yZSB0aGUgc3RydWN0dXJlSUQgb2YgdGhlIGNlbGwgaWYganNSZWdUMTAgaXMgYSBj
ZWxsLCBvdGhlcndpc2UsIHN0b3JlIDAgb24gdGhlIGxvZyBlbnRyeS4KKyAgICBKdW1wIG5vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwoanNSZWdUMTApOworICAgIGxvYWQzMihBZGRyZXNzKGpzUmVn
VDEwLnBheWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwor
ICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDMsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50
cnk6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKICAgICBKdW1wIHNraXBJc0NlbGwgPSBqdW1wKCk7
CiAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBB
ZGRyZXNzKHJlZ1QxLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MocmVnVDMsIFR5cGVQ
cm9maWxlckxvZzo6TG9nRW50cnk6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKICAgICBza2lwSXND
ZWxsLmxpbmsodGhpcyk7CiAKICAgICAvLyBTdG9yZSB0aGUgdHlwZUxvY2F0aW9uIG9uIHRoZSBs
b2cgZW50cnkuCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVMb2NhdGlvbiksIHJl
Z1QwKTsKLSAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBUeXBlUHJvZmlsZXJMb2c6
OkxvZ0VudHJ5Ojpsb2NhdGlvbk9mZnNldCgpKSk7CisgICAgc3RvcmVQdHIocmVnVDAsIEFkZHJl
c3MocmVnVDMsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OmxvY2F0aW9uT2Zmc2V0KCkpKTsK
IAogICAgIC8vIEluY3JlbWVudCB0aGUgY3VycmVudCBsb2cgZW50cnkuCi0gICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzaXplb2YoVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeSkpLCByZWdUMSk7Ci0g
ICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMiwgVHlwZVByb2ZpbGVyTG9nOjpjdXJyZW50
TG9nRW50cnlPZmZzZXQoKSkpOwotICAgIEp1bXAgc2tpcENsZWFyTG9nID0gYnJhbmNoUHRyKE5v
dEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlUHJvZmlsZXJMb2ctPmxvZ0Vu
ZFB0cigpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoVHlwZVByb2ZpbGVyTG9n
OjpMb2dFbnRyeSkpLCByZWdUMyk7CisgICAgc3RvcmVQdHIocmVnVDMsIEFkZHJlc3MocmVnVDIs
IFR5cGVQcm9maWxlckxvZzo6Y3VycmVudExvZ0VudHJ5T2Zmc2V0KCkpKTsKKyAgICBKdW1wIHNr
aXBDbGVhckxvZyA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDMsIFRydXN0ZWRJbW1QdHIoY2Fj
aGVkVHlwZVByb2ZpbGVyTG9nLT5sb2dFbmRQdHIoKSkpOwogICAgIC8vIENsZWFyIHRoZSBsb2cg
aWYgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgbG9nLgogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2Vw
dGlvbkNoZWNrKG9wZXJhdGlvblByb2Nlc3NUeXBlUHJvZmlsZXJMb2csICZ2bSgpKTsKICAgICBz
a2lwQ2xlYXJMb2cubGluayh0aGlzKTsKQEAgLTE3NzgsMTMgKzE4MzIsMTMgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4o
KSk7CiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7Ci0gICAgc3RhdGljX2Fzc2VydChub25BcmdH
UFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxl
bXMgaWYgdGhpcyBpcyB0cnVlLiIpOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKHJlZ1Qw
LCBub25BcmdHUFIwLCByZWdUMiksICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0
cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9n
U2hhZG93Q2hpY2tlblByb2xvZ3VlPigpOwogICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSBy
ZWdUMDsKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3Qg
YmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVn
VDI7CiAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcs
IHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3Njb3BlLCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxv
YWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwogICAgIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1
ZVBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCByZWdUMyk7CiB9CiAKQEAgLTE3
OTIsNyArMTg0Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWls
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQodm0oKS5zaGFkb3dDaGlja2VuKCkpOwogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwot
ICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJl
Z1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KG5vT3ZlcmxhcChyZWdUMCwgbm9uQXJnR1BSMCwgcmVnVDIpLCAid2Ugd2lsbCBo
YXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG5vT3Zl
cmxhcChyZWdUMCwgcmVnVDEsIGpzUmVnVDMyLCByZWdUNCksICJ3ZSB3aWxsIGhhdmUgcHJvYmxl
bXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1Bh
Y2tldFJlZyA9IHJlZ1QwOwogICAgIHsKQEAgLTE4MDAsMTQgKzE4NTUsMTIgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CiAgICAg
ICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3Jh
dGNoMVJlZywgc2NyYXRjaDJSZWcpOwogICAgIH0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3RoaXNWYWx1ZSwganNSZWdUMzIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1Q0KTsKICAgICBsb2FkUHRyKGFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDEpOwotICAgIGxvZ1NoYWRvd0NoaWNr
ZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywg
cmVnVDEsIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CisgICAgbG9nU2hhZG93Q2hp
Y2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBqc1JlZ1QzMiwgcmVnVDQsIHJlZ1QxLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQogCi0jZW5kaWYgLy8gVVNFKEpTVkFM
VUU2NCkKLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9sX2Zsb3coY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBtX2lzU2hhcmVhYmxlID0gZmFs
c2U7CkBAIC0xODY4LDI4ICsxOTIxLDI0IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVu
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QXJndW1lbnQ+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIGludCBpbmRleCA9IGJ5dGVjb2Rl
Lm1faW5kZXg7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
KHJlZ1QwKTsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMSwgcmVnVDAp
OwotI2VuZGlmCiAKICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QyKTsKICAgICBKdW1wIGFyZ3VtZW50T3V0T2ZCb3Vu
ZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoaW5kZXgp
KTsKLSAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xv
dDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVncyk7CisgICAgbG9hZFZhbHVlKGFk
ZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCArIGlu
ZGV4KSksIGpzUmVnVDEwKTsKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBhcmd1bWVu
dE91dE9mQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJl
c3VsdFJlZ3MpOworICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5lZCgpLCBqc1JlZ1QxMCk7CiAKICAg
ICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwg
cmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3Mp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIGpzUmVnVDEwKTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfcHJvdG90eXBlX29mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQ
cm90b3R5cGVPZj4oKTsKKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgdmFs
dWVSZWdzKHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QyKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCBkNDg0MzRj
ZWZmYTllNTI3MTc3MjljMzU0NDA3OTU3OGFjZmUxNzgzLi40MmFjMTAzZjNlYzY4NGZiODZhOGUy
MWNlMzllNzdhMWZjNWE0MDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzMzJfNjQuY3BwCkBAIC01MCw3MyArNTAsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
dm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb3Y+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKLSAgICAKLSAgICBpZiAoc3JjLmlzQ29u
c3RhbnQoKSkKLSAgICAgICAgZW1pdFN0b3JlKGRzdCwgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykp
OwotICAgIGVsc2UgewotICAgICAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7Ci0gICAg
ICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci0gICAgfQotfQotCi12b2lkIEpJVDo6
ZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBBU1NFUlQocmV0dXJuVmFsdWVHUFIgIT0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW5kPigpOwotICAgIGVtaXRMb2Fk
KGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QxLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAgZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlcygpOwotICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Ci0gICAgcmV0KCk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2ptcChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSm1wPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgdGFy
Z2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAg
IHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0
cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IGFs
bG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNGaW5hbE9iamVjdD4oKm1fdm0sIGFs
bG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7Ci0KLSAg
ICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJldHVyblZhbHVlR1BSOwotICAgIFJlZ2lzdGVySUQg
YWxsb2NhdG9yUmVnID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDM7
Ci0KLSAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAg
ICBlbHNlIHsKLSAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICBhdXRvIGJ1dHRl
cmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUpTT2Jq
ZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0
b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBz
bG93Q2FzZXMpOwotICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVn
LCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOwotICAgICAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWcp
OwotICAgIH0KLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgp
OwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09iamVjdCwg
JnZtKCksIHN0cnVjdHVyZSk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BS
KTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCk7CkBAIC0xMjQs
MTMgKzU3LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
Y29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwogCi0gICAg
ZW1pdExvYWRQYXlsb2FkKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyUGF5bG9hZChoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAgICAgLy8gV2Ug
ZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRvLgog
ICAgIEp1bXAgaGFzSW5zdGFuY2VWYWx1ZU5vdENlbGwgPSBlbWl0SnVtcElmTm90SlNDZWxsKGhh
c0luc3RhbmNlVmFsdWUpOwotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5j
aFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkp
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBKdW1wIGN1c3RvbWhhc0luc3Rh
bmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBPQkpF
Q1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3lt
Ym9sRnVuY3Rpb24pKSk7CiAKICAgICAvLyBXZSBrbm93IHRoYXQgY29uc3RydWN0b3IgaXMgYW4g
b2JqZWN0IGZyb20gdGhlIHdheSBieXRlY29kZSBpcyBlbWl0dGVkIGZvciBpbnN0YW5jZW9mIGV4
cHJlc3Npb25zLgotICAgIGVtaXRMb2FkUGF5bG9hZChjb25zdHJ1Y3RvciwgcmVnVDApOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGNvbnN0cnVjdG9yLCByZWdUMCk7CiAKICAg
ICAvLyBDaGVjayB0aGF0IGNvbnN0cnVjdG9yICdJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNl
JyBpLmUuIHRoZSBvYmplY3QgaXMgbm90IGEgQy1BUEkgdXNlciBub3IgYSBib3VuZCBmdW5jdGlv
bi4KICAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVn
VDApOwpAQCAtMTU5LDggKzkzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIHVzaW5nIEJhc2VsaW5lSW5z
dGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDFHUFI7CiAgICAgdXNpbmcgQmFzZWxpbmVJbnN0YW5j
ZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMkdQUjsKIAotICAgIGVtaXRMb2FkUGF5bG9hZCh2YWx1ZSwg
dmFsdWVKU1IucGF5bG9hZEdQUigpKTsKLSAgICBlbWl0TG9hZFBheWxvYWQocHJvdG8sIHByb3Rv
SlNSLnBheWxvYWRHUFIoKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQodmFs
dWUsIHZhbHVlSlNSLnBheWxvYWRHUFIoKSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBh
eWxvYWQocHJvdG8sIHByb3RvSlNSLnBheWxvYWRHUFIoKSk7CiAKICAgICAvLyBDaGVjayB0aGF0
IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tl
ZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2UuCiAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHZhbHVlKTsKQEAgLTE4OCwxMiArMTIyLDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZXN1bHRHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1p
dF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCi17Ci0gICAgLy8gVGhp
cyBhbHdheXMgZ29lcyB0byBzbG93IHBhdGggc2luY2Ugd2UgZXhwZWN0IGl0IHRvIGJlIHJhcmUu
Ci0gICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwpAQCAtMjE0LDE1ICsxNDIsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNl
b2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICB1
c2luZyBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnByb3RvSlNSOwogICAgIHN0YXRpY19h
c3NlcnQodmFsdWVKU1IgPT0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMj4o
KSk7CiAgICAgLy8gUHJvdG8gd2lsbCBiZSBwYXNzZWQgb24gc3RhY2ssIGp1c3QgbWFrZSBzdXJl
IG5vIG92ZXJsYXAKLSAgICBzdGF0aWNfYXNzZXJ0KCFwcm90b0pTUi51c2VzKGdsb2JhbE9iamVj
dEdQUikpOwotICAgIHN0YXRpY19hc3NlcnQoIXByb3RvSlNSLnVzZXMoc3R1YkluZm9HUFIpKTsK
LSAgICBzdGF0aWNfYXNzZXJ0KCF2YWx1ZUpTUi51c2VzKGdsb2JhbE9iamVjdEdQUikpOwotICAg
IHN0YXRpY19hc3NlcnQoIXZhbHVlSlNSLnVzZXMoc3R1YkluZm9HUFIpKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KG5vT3ZlcmxhcCh2YWx1ZUpTUiwgcHJvdG9KU1IsIGdsb2JhbE9iamVjdEdQUiwgc3R1
YkluZm9HUFIpKTsKIAogICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKICAg
ICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5mb0NvbnN0YW50SW5kZXgsIHN0dWJJ
bmZvR1BSKTsKLSAgICBlbWl0TG9hZFRhZyh2YWx1ZSwgdmFsdWVKU1IudGFnR1BSKCkpOwotICAg
IGVtaXRMb2FkVGFnKHByb3RvLCBwcm90b0pTUi50YWdHUFIoKSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlclRhZyh2YWx1ZSwgdmFsdWVKU1IudGFnR1BSKCkpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJUYWcocHJvdG8sIHByb3RvSlNSLnRhZ0dQUigpKTsKICAgICBjYWxsT3BlcmF0
aW9uPFNsb3dPcGVyYXRpb24+KAogICAgICAgICBBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLAogICAgICAgICBkc3QsCkBAIC0y
MzAsODMgKzE1NSwyNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2Nv
bnN0cnVjdG9yOwotICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNv
ZGUubV9oYXNJbnN0YW5jZVZhbHVlOwotCi0gICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdU
MCk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGNvbnN0cnVjdG9yLCByZWdUMik7Ci0gICAgZW1pdExv
YWQoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDQsIHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDQs
IHJlZ1QzKSk7Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLSAg
ICAKIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJc0VtcHR5PigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAg
Ci0gICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1Qx
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZyksIHJlZ1QwKTsKIAogICAgIGVt
aXRTdG9yZUJvb2woZHN0LCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3R5cGVvZl9p
c191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVvZklzVW5kZWZp
bmVkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7Ci0gICAgCi0gICAgZW1p
dExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNl
bGwocmVnVDEpOwotCi0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0g
ICAgCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7
Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0gICAgCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmls
ZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBj
b21wYXJlMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOwotCi0gICAgbm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0
U3RvcmVCb29sKGRzdCwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmlu
ZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWRPck51
bGw+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVtaXRMb2Fk
VGFnKHZhbHVlLCByZWdUMCk7Ci0gICAgc3RhdGljX2Fzc2VydCgoSlNWYWx1ZTo6VW5kZWZpbmVk
VGFnICsgMSA9PSBKU1ZhbHVlOjpOdWxsVGFnKSAmJiAoSlNWYWx1ZTo6TnVsbFRhZyAmIDB4MSks
ICIiKTsKLSAgICBvcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIGNvbXBhcmUzMihF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSwgcmVnVDApOwotICAg
IGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2lzX2Jv
b2xlYW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAotICAgIGVtaXRMb2FkVGFnKHZhbHVl
LCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyh2YWx1ZSwgcmVnVDApOwog
ICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFu
VGFnKSwgcmVnVDApOwogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7CiB9CkBAIC0zMTcs
NyArMTg0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsK
ICAgICAKLSAgICBlbWl0TG9hZFRhZyh2YWx1ZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJUYWcodmFsdWUsIHJlZ1QwKTsKICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJl
Z1QwKTsKICAgICBjb21wYXJlMzIoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
TG93ZXN0VGFnICsgMSksIHJlZ1QwKTsKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwpA
QCAtMzM2LDcgKzIwMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGludCB0eXBlID0gYnl0ZWNvZGUubV90
eXBlOwogCi0gICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBKdW1wIGlzTm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7CiAKICAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwg
cmVnVDApOwpAQCAtMzU1LDcgKzIyMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSwgcmVnVDApOwogICAgIEp1bXAg
aXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKIAogICAgIGNvbXBhcmU4KEFib3Zl
T3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOwpAQCAtMzc0LDcgKzI0MSw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0TG9hZChzcmMs
IHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QxLCBy
ZWdUMCk7CiAKICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOwpAQCAtMzkwLDcgKzI1Nyw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7CiAKLSAgICBlbWl0TG9h
ZChzcmMsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QxLCByZWdUMCk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsK
ICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdUMCk7CkBAIC00MDEsMTE5ICsyNjgs
MjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdU
MCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGZ1bmMgPSBieXRlY29kZS5tX2Z1bmN0aW9uOwotICAgIFZpcnR1YWxSZWdpc3RlciBuYW1l
ID0gYnl0ZWNvZGUubV9uYW1lOwotICAgIGVtaXRMb2FkUGF5bG9hZChmdW5jLCByZWdUMSk7Ci0g
ICAgZW1pdExvYWQobmFtZSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblNldEZ1bmN0aW9uTmFtZSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IHJlZ1QxLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRf
b3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMg
PSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0TG9hZFRhZyhzcmMsIHJlZ1QwKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHNyYywgcmVnVDApOwogCi0gICAgZW1pdExvYWQo
c3JjLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdU
MSwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Qm9vbGVhbihyZWdUMSwgSW52
YWxpZEdQUlJlZykpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwogCiAgICAg
ZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwLCAoZHN0ID09IHNyYykpOwogfQogCi12b2lkIEpJVDo6
ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpmYWxzZT4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZCA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOwotICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKLQotICAgIGVtaXRMb2FkKGNvbmQsIHJlZ1QxLCByZWdUMCk7Ci0KLSAg
ICBKU1ZhbHVlUmVncyB2YWx1ZShyZWdUMSwgcmVnVDApOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9
IHJlZ1QyOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOwotICAgIGJvb2wgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFs
c2V5KHZtKCksIHZhbHVlLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGNvbmQgPSBieXRlY29kZS5tX2NvbmRpdGlvbjsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0KLSAg
ICBlbWl0TG9hZChjb25kLCByZWdUMSwgcmVnVDApOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZShyZWdUMSwg
cmVnVDApOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwotICAgIEdQUlJlZyBzY3JhdGNo
MiA9IHJlZ1QzOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgdmFsdWUsIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKZXFOdWxsPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5t
X3ZhbHVlOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLQotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEs
IHJlZ1QwKTsKLQotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDEp
OwotCi0gICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OCha
ZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbW92ZShUcnVz
dGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwot
ICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omds
b2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgbWFzcXVlcmFk
ZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7Ci0KLSAgICAvLyBOb3cgaGFuZGxlIHRo
ZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCi0gICAgaXNJbW1lZGlhdGUubGlu
ayh0aGlzKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChKU1ZhbHVlOjpVbmRlZmluZWRUYWcgKyAxID09
IEpTVmFsdWU6Ok51bGxUYWcpICYmIChKU1ZhbHVlOjpOdWxsVGFnICYgMHgxKSwgIiIpOwotICAg
IG9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZk51bGwo
cmVnVDEpLCB0YXJnZXQpOwotCi0gICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsK
LX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKbmVxTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUu
bV92YWx1ZTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0KLSAgICBlbWl0TG9hZChzcmMsIHJlZ1Qx
LCByZWdUMCk7Ci0KLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qx
KTsKLQotICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpLCB0YXJnZXQpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3Byb2Zp
bGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5j
aFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAo
KTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAm
IG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotCi0gICAgc3RhdGljX2Fzc2VydCgo
SlNWYWx1ZTo6VW5kZWZpbmVkVGFnICsgMSA9PSBKU1ZhbHVlOjpOdWxsVGFnKSAmJiAoSlNWYWx1
ZTo6TnVsbFRhZyAmIDB4MSksICIiKTsKLSAgICBvcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEp
OwotICAgIGFkZEp1bXAoYnJhbmNoSWZOb3ROdWxsKHJlZ1QxKSwgdGFyZ2V0KTsKLQotICAgIHdh
c05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZp
bmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEp1bmRlZmluZWRPck51
bGw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0TG9hZFRhZyh2YWx1ZSwgcmVnVDApOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIHJlZ1QwKTsKICAgICBzdGF0aWNfYXNz
ZXJ0KChKU1ZhbHVlOjpVbmRlZmluZWRUYWcgKyAxID09IEpTVmFsdWU6Ok51bGxUYWcpICYmIChK
U1ZhbHVlOjpOdWxsVGFnICYgMHgxKSwgIiIpOwogICAgIG9yMzIoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hJZk51bGwocmVnVDApLCB0YXJnZXQpOwpAQCAtNTI1
LDcgKzMwMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5kZWZpbmVkX29yX251bGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFs
dWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRM
b2FkVGFnKHZhbHVlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyh2YWx1
ZSwgcmVnVDApOwogICAgIHN0YXRpY19hc3NlcnQoKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyArIDEg
PT0gSlNWYWx1ZTo6TnVsbFRhZykgJiYgKEpTVmFsdWU6Ok51bGxUYWcgJiAweDEpLCAiIik7CiAg
ICAgb3IzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaElmTm90
TnVsbChyZWdUMCksIHRhcmdldCk7CkBAIC01MzUsMTMgKzMxMSwxMiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9qZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXFQdHI+KCk7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgSlNWYWx1ZSBz
cGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2lu
dGVyKTsKLSAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKIAotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDEsIHJlZ1QwKTsKICAgICBKdW1wIG5vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDEpOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0NlbGwoKSkpLCB0YXJnZXQpOworICAg
IGxvYWRDb2RlQmxvY2tDb25zdGFudFBheWxvYWQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwg
cmVnVDIpOworICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIpLCB0YXJn
ZXQpOwogICAgIG5vdENlbGwubGluayh0aGlzKTsKIH0KIApAQCAtNTQ5LDEzICszMjQsMTIgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEpuZXFQdHI+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7
Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChieXRlY29k
ZS5tX3NwZWNpYWxQb2ludGVyKTsKLSAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXNDZWxsKCkp
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1Qw
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDEsIHJlZ1QwKTsKICAgICBK
dW1wIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwotICAgIEp1bXAgZXF1YWwgPSBi
cmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2Vs
bCgpKSk7CisgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50UGF5bG9hZChieXRlY29kZS5tX3NwZWNp
YWxQb2ludGVyLCByZWdUMik7CisgICAgSnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVn
VDAsIHJlZ1QyKTsKICAgICBub3RDZWxsLmxpbmsodGhpcyk7CiAgICAgc3RvcmU4VG9NZXRhZGF0
YShUcnVzdGVkSW1tMzIoMSksIGJ5dGVjb2RlLCBPcEpuZXFQdHI6Ok1ldGFkYXRhOjpvZmZzZXRP
Zkhhc0p1bXBlZCgpKTsKICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKQEAgLTU3MCw3ICsz
NDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRMb2Fk
MihzcmMxLCByZWdUMSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCByZWdUMik7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDEsIHJlZ1QzKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1Qx
KSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwpAQCAtNTk1LDEzICszNzAsMTUgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUUKICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVn
VDIpKTsKIAogICAgIC8vIFN0cmluZyBjYXNlLgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZVN0cmluZ0VxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVn
VDAsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgcmVnVDEsIHJlZ1QwLCByZWdUMik7CiAgICAg
c3RvcmVSZXN1bHQuYXBwZW5kKGp1bXAoKSk7CiAKICAgICAvLyBHZW5lcmljIGNhc2UuCiAgICAg
Z2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gZG91YmxlcwogICAgIGdl
bmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
RXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDQs
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwog
CiAgICAgc3RvcmVSZXN1bHQubGluayh0aGlzKTsKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOwpAQCAtNjE0LDcgKzM5MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2plcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcmMxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRl
Y29kZS5tX3JoczsKIAotICAgIGVtaXRMb2FkMihzcmMxLCByZWdUMSwgcmVnVDAsIHNyYzIsIHJl
Z1QzLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMSwgcmVn
VDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgcmVnVDMsIHJlZ1QyKTsKICAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7CiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QxKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
QmVsb3csIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwpAQCAtNjM0
LDE0ICs0MTIsMTYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQ29tcGlsZU9wRXEKICAgICBnZW5lcmljQ2FzZS5h
cHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDIpKTsKIAogICAgIC8vIFN0cmluZyBjYXNlLgot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX3Byb2ZpbGVkQ29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwg
cmVnVDEsIHJlZ1QwLCByZWdUMik7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMy
KHR5cGUgPT0gQ29tcGlsZU9wRXFUeXBlOjpFcSA/IE5vblplcm8gOiBaZXJvLCByZXR1cm5WYWx1
ZUdQUiksIGp1bXBUYXJnZXQpOwogICAgIGRvbmUuYXBwZW5kKGp1bXAoKSk7CiAKICAgICAvLyBH
ZW5lcmljIGNhc2UuCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsg
Ly8gZG91YmxlcwogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlRXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsK
KyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVFcSwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMih0eXBl
ID09IENvbXBpbGVPcEVxVHlwZTo6RXEgPyBOb25aZXJvIDogWmVybywgcmV0dXJuVmFsdWVHUFIp
LCBqdW1wVGFyZ2V0KTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKQEAgLTY2MSw3ICs0NDEsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0TG9hZDIoc3Jj
MSwgcmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjMSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYzIsIHJlZ1QzLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QxLCByZWdUMykpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMSkpOwog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEJlbG93LCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6Okxvd2VzdFRhZykpKTsKQEAgLTY4NiwxMyArNDY3LDE1IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QyKSk7
CiAKICAgICAvLyBTdHJpbmcgY2FzZS4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVTdHJpbmdFcSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QwLCBy
ZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIHJlZ1QxLCByZWdUMCwgcmVnVDIpOwogICAgIHN0b3Jl
UmVzdWx0LmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8gR2VuZXJpYyBjYXNlLgogICAgIGdlbmVy
aWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMKICAgICBnZW5lcmlj
Q2FzZS5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBt
X3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1Q0LCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKIAogICAg
IHN0b3JlUmVzdWx0LmxpbmsodGhpcyk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJl
dHVyblZhbHVlR1BSKTsKQEAgLTcwNiw3ICs0ODksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lz
dGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5
dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdExvYWQyKHNyYzEsIHJlZ1QxLCByZWdUMCwgc3JjMiwg
cmVnVDMsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QxLCBy
ZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCByZWdUMywgcmVnVDIpOwog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDEpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihCZWxvdywgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CkBAIC03
MjksNyArNTEzLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRl
Y29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwog
Ci0gICAgZW1pdExvYWQyKHNyYzEsIHJlZ1QxLCByZWdUMCwgc3JjMiwgcmVnVDMsIHJlZ1QyKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCByZWdUMywgcmVnVDIpOwogCiAgICAgLy8gQmFpbCBp
ZiB0aGUgdGFncyBkaWZmZXIsIG9yIGFyZSBkb3VibGUuCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMykpOwpAQCAtNzY5LDExICs1NTQsMTIgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRMb2FkMihz
cmMxLCByZWdUMSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMxLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjMiwgcmVnVDMsIHJlZ1QyKTsKIAogICAgIC8vIEJhaWwgaWYgdGhlIHRhZ3MgZGlmZmVy
LCBvciBhcmUgZG91YmxlLgogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MSwgcmVnVDMpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywgcmVnVDEsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
QmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwogCiAgICAg
Ly8gSnVtcCB0byBhIHNsb3cgY2FzZSBpZiBib3RoIGFyZSBzdHJpbmdzIG9yIHN5bWJvbHMgKG5v
biBvYmplY3QpLgogICAgIEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7CkBA
IC04MDUsNyArNTkxLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wKIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOwogICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwg
bV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdU
NCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7
CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKIH0KIApAQCAtODE1LDkxICs2MDIsMTggQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFMKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Sm5zdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRl
c3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0
X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKLQotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEs
IHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsK
LQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVy
bywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDAp
LCByZWdUMSk7Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgp
OwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QwLCByZWdU
MiwgcmVnVDEpOwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgaXNJ
bW1lZGlhdGUubGluayh0aGlzKTsKLQotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihFcXVhbCwg
cmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMSk7Ci0gICAg
b3IzMihyZWdUMiwgcmVnVDEpOwotCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0g
ICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotCi0gICAgZW1pdFN0
b3JlQm9vbChkc3QsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRl
Y29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7Ci0gICAg
SnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7Ci0KLSAgICBKdW1wIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAg
IEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZWdUMik7Ci0gICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsK
LSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIGlzSW1tZWRpYXRlLmxp
bmsodGhpcyk7Ci0KLSAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6TnVsbFRhZyksIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1Qx
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDEpOwotICAgIGFuZDMy
KHJlZ1QyLCByZWdUMSk7Ci0KLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICB3
YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0KLSAgICBlbWl0U3RvcmVC
b29sKGRzdCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7Ci0gICAgQVNTRVJUKHJlZ1QwID09IHJldHVy
blZhbHVlR1BSKTsKLSAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwotICAgIGVtaXRMb2FkKGJ5dGVjb2RlLm1fdmFsdWUs
IHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uVGhyb3csIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApKTsKLSAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkpOwotfQot
CiB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRvTnVtYmVyPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0gICAg
ZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjLCByZWdUMSwgcmVnVDApOwogCiAgICAgSnVtcCBpc0ludDMyID0gYnJhbmNoSWZJbnQzMihy
ZWdUMSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKQEAgLTkxNyw3ICs2MzEsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90b19udW1lcmljKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAg
ICBKU1ZhbHVlUmVncyBhcmd1bWVudFZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwogCi0gICAgZW1p
dExvYWQoc3JjLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMSwgcmVnVDApOwogCiAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDEpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SGVhcEJpZ0ludChyZWdUMCkpOwpA
QCAtOTM4LDcgKzY1Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3N0cmluZyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwogCi0gICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMSwgcmVnVDApOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RDZWxsKHJlZ1QxKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVn
VDApKTsKQEAgLTk1Myw3ICs2NjcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZDsKIAotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDEsIHJlZ1QwKTsKIAogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90Q2VsbChyZWdUMSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2Jq
ZWN0KHJlZ1QwKSk7CkBAIC0xMDI1LDc0ICs3MzksMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X3BhcmVudF9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2Nv
cGU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2Nv
cGU7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGN1cnJlbnRTY29wZSwgcmVnVDApOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGN1cnJlbnRTY29wZSwgcmVnVDApOwogICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CiAgICAg
ZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdCwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1p
dF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17
Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hJbW0+
KCk7Ci0gICAgc2l6ZV90IHRhYmxlSW5kZXggPSBieXRlY29kZS5tX3RhYmxlSW5kZXg7Ci0gICAg
dW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUg
PSBieXRlY29kZS5tX3NjcnV0aW5lZTsKLQotICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBz
d2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29u
c3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3Byb2ZpbGVkQ29k
ZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwot
ICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2Rl
SW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlKSk7Ci0gICAgbGlu
a2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7Ci0KLSAgICBlbWl0TG9hZChz
Y3J1dGluZWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgYXV0byBub3RJbnQzMiA9IGJyYW5jaElmTm90
SW50MzIocmVnVDEpOwotICAgIHN1YjMyKEltbTMyKHVubGlua2VkVGFibGUubV9taW4pLCByZWdU
MCk7Ci0KLSAgICBhZGRKdW1wKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDAsIEltbTMyKGxp
bmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXplKCkpKSwgZGVmYXVsdE9mZnNldCk7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5kYXRhKCkpLCByZWdUMSk7
Ci0gICAgbG9hZFB0cihCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBTY2FsZVB0ciksIHJlZ1QxKTsK
LSAgICBmYXJKdW1wKHJlZ1QxLCBOb1B0clRhZyk7Ci0KLSAgICBub3RJbnQzMi5saW5rKHRoaXMp
OwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblN3aXRjaEltbVdp
dGhVbmtub3duS2V5VHlwZSwgJnZtKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxl
SW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIs
IE5vUHRyVGFnKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFN3aXRjaENoYXI+KCk7Ci0gICAgc2l6ZV90IHRhYmxlSW5k
ZXggPSBieXRlY29kZS5tX3RhYmxlSW5kZXg7Ci0gICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX2RlZmF1bHRPZmZzZXQp
OwotICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsK
LQotICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFj
ayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFi
bGUmIHVubGlua2VkVGFibGUgPSBtX3Byb2ZpbGVkQ29kZUJsb2NrLT51bmxpbmtlZFN3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0g
bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOwotICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3
aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3
aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7Ci0gICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUo
dW5saW5rZWRUYWJsZSk7Ci0KLSAgICBlbWl0TG9hZChzY3J1dGluZWUsIHJlZ1QxLCByZWdUMCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBl
LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgdGFibGVJbmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7Ci0gICAgZmFySnVtcChy
ZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hf
c3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hTdHJpbmc+KCk7Ci0g
ICAgc2l6ZV90IHRhYmxlSW5kZXggPSBieXRlY29kZS5tX3RhYmxlSW5kZXg7Ci0gICAgdW5zaWdu
ZWQgZGVmYXVsdE9mZnNldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX2RlZmF1bHRPZmZzZXQpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRl
Y29kZS5tX3NjcnV0aW5lZTsKLQotICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2gg
ZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgY29uc3QgVW5s
aW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX3Byb2ZpbGVkQ29kZUJsb2Nr
LT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBTdHJpbmdK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5k
ZXhdOwotICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5
dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7Ci0gICAg
bGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7Ci0KLSAgICBlbWl0TG9h
ZChzY3J1dGluZWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25T
d2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJsZUluZGV4KTsKLSAgICBm
YXJKdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29w
X2VudGVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgZW1p
dEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKTsKQEAgLTExMDAsNyArNzUxLDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICAvLyBFdmVuIHRob3VnaCBKSVQgY29kZSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXpl
IG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRv
IGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBh
bmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBDb2RlQmxv
Y2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaSA8
IG1fcHJvZmlsZWRDb2RlQmxvY2stPm51bVZhcnMoKTsgKytpKQorICAgIHNpemVfdCBjb3VudCA9
IG1fdW5saW5rZWRDb2RlQmxvY2stPm51bVZhcnMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gQ29k
ZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7
IGkgPCBjb3VudDsgKytpKQogICAgICAgICBlbWl0U3RvcmUodmlydHVhbFJlZ2lzdGVyRm9yTG9j
YWwoaSksIGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2Fs
bCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnRlcik7CkBAIC0xMTE2LDE2
NCArNzY4LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CiB9
CiAKLXZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BDcmVhdGVUaGlzPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZSA9
IGJ5dGVjb2RlLm1fY2FsbGVlOwotICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVk
RnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7Ci0gICAgUmVnaXN0ZXJJRCBjYWxs
ZWVSZWcgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7Ci0gICAg
UmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJl
ZyA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgc3RydWN0dXJlUmVnID0gcmVnVDI7Ci0gICAgUmVn
aXN0ZXJJRCBjYWNoZWRGdW5jdGlvblJlZyA9IHJlZ1Q0OwotICAgIFJlZ2lzdGVySUQgc2NyYXRj
aFJlZyA9IHJlZ1QzOwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGNhbGxlZSwgY2FsbGVlUmVnKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxlZVJlZykpOwotICAgIGxv
YWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9y
UmFyZURhdGEoKSksIHJhcmVEYXRhUmVnKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRy
KFplcm8sIHJhcmVEYXRhUmVnLCBUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcp
KSk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9m
ZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxl
V2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRh
VGFnKSwgYWxsb2NhdG9yUmVnKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1
bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVj
dEFsbG9jYXRpb25Qcm9maWxlV2l0aFByb3RvdHlwZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSAtIEpT
RnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgc3RydWN0dXJlUmVnKTsKLQotICAgIGxvYWRQdHIoY2Fj
aGVkRnVuY3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsKLSAgICBKdW1wIGhhc1NlZW5NdWx0aXBs
ZUNhbGxlZXMgPSBicmFuY2hQdHIoRXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1t
UHRyKEpTQ2VsbDo6c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKSk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBjYWxsZWVSZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7Ci0g
ICAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcy5saW5rKHRoaXMpOwotCi0gICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOwotICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAg
ICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6dmFyaWFibGUo
KSwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xv
d0Nhc2VzKTsKLSAgICBsb2FkOChBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxp
bmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7Ci0gICAgZW1pdEluaXRpYWxpemVJbmxp
bmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nh
c2VzKTsKLSAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWcpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BUb1RoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKTsKLSAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3RydWN0dXJlSUQgPSAm
bWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1Jl
Z2lzdGVyID0gYnl0ZWNvZGUubV9zcmNEc3Q7Ci0KLSAgICBlbWl0TG9hZCh0aGlzUmVnaXN0ZXIs
IHJlZ1QzLCByZWdUMik7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDMp
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDIsIEZpbmFsT2JqZWN0VHlw
ZSkpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDApOwotICAgIGxvYWQzMihjYWNoZWRTdHJ1Y3R1cmVJRCwgcmVnVDIpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyKSk7Ci19Ci0KIHZv
aWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Q2hlY2tUZHo+KCk7Ci0gICAgZW1pdExvYWRUYWcoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVn
aXN0ZXIsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKGJ5dGVjb2RlLm1f
dGFyZ2V0VmlydHVhbFJlZ2lzdGVyLCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZF
bXB0eShyZWdUMCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwotICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7Ci0gICAgVHlwZUxv
Y2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldFZpcnR1
YWxSZWdpc3RlcjsKLQotICAgIC8vIExvYWQgcGF5bG9hZCBpbiBUMC4gTG9hZCB0YWcgaW4gVDMu
Ci0gICAgZW1pdExvYWRQYXlsb2FkKHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7Ci0gICAgZW1pdExv
YWRUYWcodmFsdWVUb1Byb2ZpbGUsIHJlZ1QzKTsKLQotICAgIEp1bXBMaXN0IGp1bXBUb0VuZDsK
LQotICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMykpOwotCi0gICAgLy8g
Q29tcGlsZSBpbiBhIHByZWRpY3RpdmUgdHlwZSBjaGVjaywgaWYgcG9zc2libGUsIHRvIHNlZSBp
ZiB3ZSBjYW4gc2tpcCB3cml0aW5nIHRvIHRoZSBsb2cuCi0gICAgLy8gVGhlc2UgdHlwZWNoZWNr
cyBhcmUgaW5saW5lZCB0byBtYXRjaCB0aG9zZSBvZiB0aGUgMzItYml0IEpTVmFsdWUgdHlwZSBj
aGVja3MuCi0gICAgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlw
ZVVuZGVmaW5lZCkKLSAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZlVuZGVmaW5lZChy
ZWdUMykpOwotICAgIGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUg
PT0gVHlwZU51bGwpCi0gICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZOdWxsKHJlZ1Qz
KSk7Ci0gICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBU
eXBlQm9vbGVhbikKLSAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZkJvb2xlYW4ocmVn
VDMsIEludmFsaWRHUFJSZWcpKTsKLSAgICBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1f
bGFzdFNlZW5UeXBlID09IFR5cGVBbnlJbnQpCi0gICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJh
bmNoSWZJbnQzMihyZWdUMykpOwotICAgIGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9s
YXN0U2VlblR5cGUgPT0gVHlwZU51bWJlcikgewotICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJy
YW5jaElmTnVtYmVyKEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMCksIHJlZ1QxKSk7Ci0gICAgfSBl
bHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVTdHJpbmcp
IHsKLSAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDMpOwotICAg
ICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmU3RyaW5nKHJlZ1QwKSk7Ci0gICAgICAgIGlz
Tm90Q2VsbC5saW5rKHRoaXMpOwotICAgIH0KLQotICAgIC8vIExvYWQgdGhlIHR5cGUgcHJvZmls
aW5nIGxvZyBpbnRvIFQyLgotICAgIFR5cGVQcm9maWxlckxvZyogY2FjaGVkVHlwZVByb2ZpbGVy
TG9nID0gbV92bS0+dHlwZVByb2ZpbGVyTG9nKCk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGNh
Y2hlZFR5cGVQcm9maWxlckxvZyksIHJlZ1QyKTsKLQotICAgIC8vIExvYWQgdGhlIG5leHQgbG9n
IGVudHJ5IGludG8gVDEuCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBUeXBlUHJvZmlsZXJM
b2c6OmN1cnJlbnRMb2dFbnRyeU9mZnNldCgpKSwgcmVnVDEpOwotCi0gICAgLy8gU3RvcmUgdGhl
IEpTVmFsdWUgb250byB0aGUgbG9nIGVudHJ5LgotICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3Mo
cmVnVDEsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnZhbHVlT2Zmc2V0KCkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKLSAgICBzdG9yZTMyKHJlZ1Qz
LCBBZGRyZXNzKHJlZ1QxLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojp2YWx1ZU9mZnNldCgp
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLQotICAgIC8vIFN0
b3JlIHRoZSBzdHJ1Y3R1cmVJRCBvZiB0aGUgY2VsbCBpZiBhcmd1bWVudCBpcyBhIGNlbGwsIG90
aGVyd2lzZSwgc3RvcmUgMCBvbiB0aGUgbG9nIGVudHJ5LgotICAgIEp1bXAgbm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMyk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNz
KHJlZ1QxLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7
Ci0gICAgSnVtcCBza2lwTm90Q2VsbCA9IGp1bXAoKTsKLSAgICBub3RDZWxsLmxpbmsodGhpcyk7
Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MocmVnVDEsIFR5cGVQcm9maWxl
ckxvZzo6TG9nRW50cnk6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKLSAgICBza2lwTm90Q2VsbC5s
aW5rKHRoaXMpOwotCi0gICAgLy8gU3RvcmUgdGhlIHR5cGVMb2NhdGlvbiBvbiB0aGUgbG9nIGVu
dHJ5LgotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlTG9jYXRpb24pLCByZWdUMCk7
Ci0gICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhyZWdUMSwgVHlwZVByb2ZpbGVyTG9nOjpMb2dF
bnRyeTo6bG9jYXRpb25PZmZzZXQoKSkpOwotCi0gICAgLy8gSW5jcmVtZW50IHRoZSBjdXJyZW50
IGxvZyBlbnRyeS4KLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihUeXBlUHJvZmlsZXJM
b2c6OkxvZ0VudHJ5KSksIHJlZ1QxKTsKLSAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1Qy
LCBUeXBlUHJvZmlsZXJMb2c6OmN1cnJlbnRMb2dFbnRyeU9mZnNldCgpKSk7Ci0gICAganVtcFRv
RW5kLmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tUHRyKGNhY2hl
ZFR5cGVQcm9maWxlckxvZy0+bG9nRW5kUHRyKCkpKSk7Ci0gICAgLy8gQ2xlYXIgdGhlIGxvZyBp
ZiB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBsb2cuCi0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uUHJvY2Vzc1R5cGVQcm9maWxlckxvZywgJnZtKCkpOwotCi0gICAg
anVtcFRvRW5kLmxpbmsodGhpcyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3df
Y2hpY2tlbl9wcm9sb2d1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQot
ewotICAgIFJFTEVBU0VfQVNTRVJUKHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKLSAgICB1cGRhdGVU
b3BDYWxsRnJhbWUoKTsKLSAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYg
bm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRy
dWUuIik7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dT
aGFkb3dDaGlja2VuUHJvbG9ndWU+KCk7Ci0gICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJl
Z1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBi
ZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KLSAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdU
MjsKLSAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCksIHNoYWRvd1BhY2tldFJlZywg
c2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKLQotICAgIHNjcmF0Y2gxUmVnID0gcmVnVDQ7Ci0g
ICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKLSAgICBsb2dTaGFk
b3dDaGlja2VuUHJvbG9ndWVQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgcmVn
VDMpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIFJFTEVBU0VfQVNTRVJU
KHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKLSAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKLSAgICBz
dGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwg
IndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7Ci0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsK
LSAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gx
UmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVy
LgotICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRvd0NoaWNr
ZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcp
OwotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDIpOwotICAg
IGVtaXRMb2FkVGFnKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMSk7Ci0gICAgSlNWYWx1ZVJl
Z3MgdGhpc1JlZ3MocmVnVDEsIHJlZ1QyKTsKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUu
bV9zY29wZSwgcmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1Bh
Y2tldFJlZywgdGhpc1JlZ3MsIHJlZ1QzLCBUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxv
Y2spLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwotfQotCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IDk1NzY5NWIzMGU5Mzk5YmJh
MGUzMGYyZWZmNDkwZDMwZmI2N2NiNWYuLmYwMmY0YWE1OWQ5NmFlMTU1NWVhMzJlYzFhMmY1MTcw
NWY0YjFlODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCkBAIC03NzUsMTQgKzc3NSwxMiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX3ByZXBhcmVDYWxsRwog
fQogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi0jaWYgVVNFKEpTVkFMVUU2
NCkKLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQ
YXlsb2FkKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5
dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYWNjZXNzb3IsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChi
eXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAs
IG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1w
bCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CkBAIC03OTAsOSArNzg4LDkgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQ
YXlsb2FkKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5
dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYWNjZXNzb3IsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChi
eXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMik7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCByZWdUMiwgcmVnVDAs
IG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1w
bCgpLCBvcHRpb25zLCByZWdUMSk7CiB9CkBAIC04MDAsMTAgKzc5OCwxMCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyU2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwogICAgIGludDMy
X3QgYXR0cmlidXRlID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlclBheWxvYWQoYnl0ZWNvZGUubV9nZXR0ZXIsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyUGF5bG9hZChieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOwogICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDMpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0
dGVyLCByZWdUMywgcmVnVDAsIG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7CiB9CkBAIC04
MTEsMjYgKzgwOSw0MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdl
dHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNl
LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5
LCByZWdUMSk7CisKKyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9u
UHV0R2V0dGVyQnlWYWwpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1JQID0g
cHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4oKTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGJhc2VHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAxPigp
OworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBwcm9wZXJ0eUpTUiA9IHByZWZlcnJlZEFyZ3Vt
ZW50SlNSPFNsb3dPcGVyYXRpb24sIDI+KCk7CisgICAgLy8gQXR0cmlidXRlcyBpbiBhcmd1bWVu
dCAzCisgICAgY29uc3RleHByIEdQUlJlZyBzZXR0ZXJHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQ
UjxTbG93T3BlcmF0aW9uLCA0PigpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxv
YWQoYnl0ZWNvZGUubV9iYXNlLCBiYXNlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fcHJvcGVydHksIHByb3BlcnR5SlNSKTsKICAgICBpbnQzMl90IGF0dHJpYnV0
ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1Qw
LCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQ
YXlsb2FkKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHNldHRlckdQUik7CisgICAgbG9hZEdsb2JhbE9i
amVjdChnbG9iYWxPYmplY3RHUlApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyQnlWYWwsIGdsb2JhbE9iamVjdEdSUCwgYmFzZUdQUiwgcHJvcGVydHlKU1IsIGF0dHJpYnV0
ZXMsIHNldHRlckdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeVZhbD4oKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOwotICAgIGludDMy
X3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKLSAgICBsb2FkR2xvYmFsT2Jq
ZWN0KHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBy
ZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7Ci19CiAKLSNlbmRpZgorICAg
IHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCk7
CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUlAgPSBwcmVmZXJyZWRBcmd1bWVu
dEdQUjxTbG93T3BlcmF0aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQUiA9
IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7CisgICAgY29uc3RleHBy
IEpTVmFsdWVSZWdzIHByb3BlcnR5SlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJh
dGlvbiwgMj4oKTsKKyAgICAvLyBBdHRyaWJ1dGVzIGluIGFyZ3VtZW50IDMKKyAgICBjb25zdGV4
cHIgR1BSUmVnIHNldHRlckdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24s
IDQ+KCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChieXRlY29kZS5tX2Jh
c2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSwgcHJvcGVydHlKU1IpOworICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1f
YXR0cmlidXRlczsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChieXRlY29kZS5t
X2FjY2Vzc29yLCBzZXR0ZXJHUFIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0
R1JQKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBnbG9iYWxP
YmplY3RHUlAsIGJhc2VHUFIsIHByb3BlcnR5SlNSLCBhdHRyaWJ1dGVzLCBzZXR0ZXJHUFIpOwor
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKQEAgLTE5NTgsMTMwICsxOTcwLDYgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2hhc19wcml2YXRlX2JyYW5kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFYKICAgICBlbWl0SGFzUHJpdmF0ZVNsb3coYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2Rl
Lm1fYmFzZSwgYnl0ZWNvZGUubV9icmFuZCwgQWNjZXNzVHlwZTo6SGFzUHJpdmF0ZUJyYW5kKTsK
IH0KIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0KLXZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUo
VmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKLXsKLSAgICBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRl
cHRoOyArK2kpCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0
T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotfQot
Ci0KLSNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi12b2lkIEpJVDo6ZW1pdF9vcF9yZXNv
bHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7
Ci0gICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fcmVzb2x2ZVR5cGU7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVj
b2RlLm1fc2NvcGU7Ci0KLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7Ci0K
LSAgICBKdW1wTGlzdCBzbG93Q2FzZTsKLQotICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9
IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnIGdsb2JhbE9iamVjdEdQ
UiA9IEludmFsaWRHUFJSZWcpIHsKLSAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNr
cykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKGdsb2JhbE9iamVjdEdQUiA9PSBJ
bnZhbGlkR1BSUmVnKSB7Ci0gICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIgPSByZWdUNDsKLSAg
ICAgICAgICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgfQot
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAg
ICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBv
aW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsK
LSAgICB9OwotCi0gICAgYXV0byBlbWl0UmVzb2x2ZUNsb3N1cmUgPSBbJl0gKGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpIHsKLSAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkxvY2FsU2NvcGVEZXB0aCgpLCByZWdU
MSk7Ci0KLSAgICAgICAgQVNTRVJUKHNjb3BlR1BSID09IHJlZ1QwKTsKLSAgICAgICAgTGFiZWwg
bG9vcCA9IGxhYmVsKCk7Ci0gICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaFRlc3QzMihaZXJvLCBy
ZWdUMSk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZO
ZXh0KCkpLCByZWdUMCk7Ci0gICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwot
ICAgICAgICBqdW1wKCkubGlua1RvKGxvb3AsIHRoaXMpOwotICAgICAgICBkb25lLmxpbmsodGhp
cyk7Ci0gICAgfTsKLQotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlKSB7Ci0gICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKLSAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2Rl
QmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgotICAgICAgICAgICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMCk7Ci0gICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwotICAgICAgICAgICAg
bG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9m
ZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpLCByZWdUMSk7Ci0gICAgICAgICAgICBz
bG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTR2xvYmFs
T2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgR2xvYmFsVmFyOgot
ICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgIGNh
c2UgR2xvYmFsTGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29w
ZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9yIEdsb2Jh
bFZhciosCi0gICAgICAgICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsTGV4aWNhbEVudmlyb25tZW50KCkgZm9yIEdsb2JhbExleGljYWxWYXIqLgotICAgICAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7Ci0gICAgICAgICAgICBkb1ZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwotICAgICAg
ICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUg
PT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgICAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgot
ICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6
Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoK
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgaWYgKHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSAKLSAgICAg
ICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRh
OjpvZmZzZXRPZkxleGljYWxFbnZpcm9ubWVudCgpLCByZWdUMCk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKLSAgICAgICAgaWYg
KHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCBwcm9maWxlZFJlc29sdmVUeXBl
ID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICAgICAgZW1pdENv
ZGUocHJvZmlsZWRSZXNvbHZlVHlwZSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwotCi0gICAgICAgICAgICBKdW1w
TGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZSZXNvbHZlVHlwZSgpLCByZWdUMSk7
Ci0KLSAgICAgICAgICAgIGF1dG8gZW1pdENhc2UgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlKSB7Ci0gICAgICAgICAgICAgICAgSnVtcCBub3RDYXNlID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QxLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgICAgICBlbWl0
Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAgICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwotICAgICAgICAgICAgICAgIG5vdENhc2UubGluayh0aGlzKTsKLSAgICAgICAgICAgIH07
Ci0KLSAgICAgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcik7Ci0gICAgICAgICAgICBlbWl0Q2Fz
ZShHbG9iYWxQcm9wZXJ0eSk7Ci0gICAgICAgICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFy
KTsKLSAgICAgICAgICAgIGVtaXRDYXNlKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
OwotICAgICAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKLSAgICAgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKTsKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOwotCi0gICAg
ICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGFk
ZFNsb3dDYXNlKHNsb3dDYXNlKTsKLQotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
LX0KLQotI2Vsc2UKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKQEAgLTIwOTQsMjEgKzE5ODIsMjAg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIEFTU0VSVChCeXRlY29kZUluZGV4KGJ5dGVjb2RlT2Zmc2V0
KSA9PSBtX2J5dGVjb2RlSW5kZXgpOwogICAgIEFTU0VSVChtX3VubGlua2VkQ29kZUJsb2NrLT5p
bnN0cnVjdGlvbkF0KG1fYnl0ZWNvZGVJbmRleCkgPT0gY3VycmVudEluc3RydWN0aW9uKTsKIAot
ICAgIC8vIElmIHdlIHByb2ZpbGUgY2VydGFpbiByZXNvbHZlIHR5cGVzLCB3ZSdyZSBnYXVyYW50
ZWVkIGFsbCBsaW5rZWQgY29kZSB3aWxsIGhhdmUgdGhlIHNhbWUKKyAgICAvLyBJZiB3ZSBwcm9m
aWxlIGNlcnRhaW4gcmVzb2x2ZSB0eXBlcywgd2UncmUgZ3VhcmFudGVlZCBhbGwgbGlua2VkIGNv
ZGUgd2lsbCBoYXZlIHRoZSBzYW1lCiAgICAgLy8gcmVzb2x2ZSB0eXBlLgogCiAgICAgaWYgKHBy
b2ZpbGVkUmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSAKLSAgICAgICAgbG9hZFB0ckZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkxleGljYWxF
bnZpcm9ubWVudCgpLCByZWdUMCk7CisgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZMZXhpY2FsRW52aXJvbm1lbnQo
KSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVsc2UgewogICAgICAgICB1aW50MzJfdCBtZXRhZGF0
YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCkub2Zmc2V0SW5NZXRhZGF0
YVRhYmxlKGJ5dGVjb2RlKTsKIAogICAgICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhR1BS
ID0gcmVnVDI7CiAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKLSAg
ICAgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgICAg
ICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDM7CiAKLSAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChzY29wZSwgc2NvcGVHUFIpOwogICAgICAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKG1ldGFkYXRhT2Zmc2V0KSwgc19tZXRhZGF0YUdQUiwgbWV0YWRhdGFHUFIp
OwotCiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVP
ZmZzZXRHUFIpOwogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gY29kZTsKQEAgLTIxMzQsNyArMjAyMSw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVf
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAgICAgZW1p
dE5ha2VkTmVhckNhbGwoY29kZS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwogICAgIH0KIAot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBib3hDZWxsKHJldHVyblZhbHVl
R1BSLCByZXR1cm5WYWx1ZUpTUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJl
dHVyblZhbHVlSlNSKTsKIH0KIAogdGVtcGxhdGUgPFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2
ZVR5cGU+CkBAIC0yMTUwLDggKzIwMzgsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhWTSYgdm0pCiAgICAg
dXNpbmcgTWV0YWRhdGEgPSBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE7CiAgICAgY29uc3RleHBy
IEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1QyOyAvLyBpbmNvbWluZwogICAgIGNvbnN0ZXhwciBH
UFJSZWcgc2NvcGVHUFIgPSByZWdUMDsgLy8gaW5jb21pbmcKLSAgICBjb25zdGV4cHIgR1BSUmVn
IGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7IC8vIGluY29taW5nIC0gcGFzcyB0aHJ1IHRvIHNs
b3cgcGF0aC4KKyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDM7
IC8vIGluY29taW5nIC0gcGFzcyB0aHJ1IHRvIHNsb3cgcGF0aC4KKyAgICBjb25zdGV4cHIgR1BS
UmVnIHNjcmF0Y2hHUFIgPSByZWdUNTsgLy8gbG9jYWwgdGVtcG9yYXJ5CiAgICAgVU5VU0VEX1BB
UkFNKGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChyZXR1
cm5WYWx1ZUdQUiwgbWV0YWRhdGFHUFIsIGJ5dGVjb2RlT2Zmc2V0R1BSLCBzY3JhdGNoR1BSKSk7
CisgICAgc3RhdGljX2Fzc2VydChzY29wZUdQUiA9PSByZXR1cm5WYWx1ZUdQUik7IC8vIGVtaXRS
ZXNvbHZlQ2xvc3VyZSBhc3N1bWVzIHRoaXMKIAogICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7
CiAKQEAgLTIxNjEsMjMgKzIwNTIsMjMgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhWTSYgdm0pCiAgICAgICAg
IGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIGlmIChnbG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQUlJlZykgewotICAgICAgICAgICAg
Z2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNz
Rm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSks
IGdsb2JhbE9iamVjdEdQUik7CisgICAgICAgICAgICBnbG9iYWxPYmplY3RHUFIgPSBzY3JhdGNo
R1BSOworICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
b2RlQmxvY2spLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
c2NyYXRjaEdQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2Jq
ZWN0R1BSKTsKICAgICAgICAgfQotICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKGdsb2JhbE9i
amVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldh
dGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgo
RXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRy
dXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3Zhcklu
amVjdGlvbldhdGNocG9pbnQpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHNsb3dDYXNlLmFwcGVu
ZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0Ojpv
ZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAgICB9Owog
CiAgICAgYXV0byBlbWl0UmVzb2x2ZUNsb3N1cmUgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MpIHsKICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyk7Ci0gICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRh
dGE6Om9mZnNldE9mTG9jYWxTY29wZURlcHRoKCkpLCByZWdUMSk7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHNjb3BlR1BSID09IHJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1l
dGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZMb2NhbFNjb3BlRGVwdGgoKSksIHNjcmF0Y2hH
UFIpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzY29wZUdQUiA9PSByZXR1cm5WYWx1ZUdQUik7
CiAKICAgICAgICAgTGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOwotICAgICAgICBKdW1wIGRvbmUg
PSBqaXQuYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKLSAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgICAgIGpp
dC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKKyAgICAgICAgSnVtcCBkb25lID0gaml0
LmJyYW5jaFRlc3QzMihaZXJvLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhyZXR1cm5WYWx1ZUdQUiwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZXR1cm5WYWx1
ZUdQUik7CisgICAgICAgIGppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOwog
ICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhsb29wLCAmaml0KTsKICAgICAgICAgZG9uZS5saW5r
KCZqaXQpOwogICAgIH07CkBAIC0yMTg3LDExICsyMDc4LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0m
IHZtKQogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6
Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkuCi0gICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNv
ZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMs
IENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICAgICAgICAg
IGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
LCByZWdUMCk7Ci0gICAgICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1l
dGFkYXRhOjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHJlZ1QxKTsKLSAg
ICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Mo
cmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2go
KSksIHJlZ1QxKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNvZGVCbG9jayksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhzY3JhdGNoR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBy
ZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICAg
ICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHbG9i
YWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmV0dXJuVmFsdWVHUFIs
IEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2goKSksIHNj
cmF0Y2hHUFIpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTIyMDEsMTEg
KzIwOTIsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6Omdl
bmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhWTSYgdm0pCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6
OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpIGZvciBHbG9iYWxWYXIqLAogICAgICAgICAgICAgLy8gYW5kIGNvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbExleGljYWxFbnZpcm9ubWVudCgpIGZvciBHbG9iYWxMZXhpY2FsVmFy
Ki4KLSAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrKSwgcmVnVDApOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
Q29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgICAgICAgICAg
ZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSks
IHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRy
ZXNzKHNjcmF0Y2hHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJldHVy
blZhbHVlR1BSKTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgICAgICAgICBp
ZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICBqaXQu
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKHJldHVyblZhbHVlR1BSLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQoKSksIHJldHVyblZhbHVlR1BSKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKQEAgLTIyODQsMjQgKzIxNzUsMjUg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcmVz
b2x2ZV9zY29wZUdlbmVyYXRvcihWTSYgdm0KICAgICAvLyBUaGUgZmFzdCBwYXRoIGFscmVhZHkg
cHVzaGVkIHRoZSByZXR1cm4gYWRkcmVzcy4KICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wdXNo
KFg4NlJlZ2lzdGVyczo6ZWJwKTsKLSNlbGlmIENQVShBUk02NCkKKyNlbGlmIENQVShBUk02NCkg
fHwgQ1BVKEFSTV9USFVNQjIpCiAgICAgaml0LnB1c2hQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVy
LCBsaW5rUmVnaXN0ZXIpOworI2VsaWYgQ1BVKE1JUFMpCisgICAgaml0LnB1c2hQYWlyKGZyYW1l
UG9pbnRlclJlZ2lzdGVyLCByZXR1cm5BZGRyZXNzUmVnaXN0ZXIpOworI2Vsc2UKKyMgICBlcnJv
ciAiTm90IGltcGxlbWVudGVkIG9uIHBsYXRmb3JtIgogI2VuZGlmCiAKLSAgICBjb25zdGV4cHIg
R1BSUmVnIGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUMzsKICAgICBqaXQuc3RvcmUz
MihpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSLCB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgY29kZUJsb2Nr
R1BSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IHJl
Z1QyOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gYXJndW1lbnRHUFIw
OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgaW5zdHJ1Y3Rpb25HUFIgPSBhcmd1bWVudEdQUjE7Cisg
ICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAoaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiwgc2Ny
YXRjaEdQUiAsIGdsb2JhbE9iamVjdEdQUiwgaW5zdHJ1Y3Rpb25HUFIpKTsKIAotICAgIHN0YXRp
Y19hc3NlcnQoaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiAhPSBjb2RlQmxvY2tHUFIpOwotICAg
IHN0YXRpY19hc3NlcnQoaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiAhPSBnbG9iYWxPYmplY3RH
UFIpOwotICAgIHN0YXRpY19hc3NlcnQoaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiAhPSBpbnN0
cnVjdGlvbkdQUik7Ci0KLSAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7Ci0gICAgaml0LmxvYWRQdHIoQWRkcmVzcyhjb2Rl
QmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVj
dEdQUik7Ci0gICAgaml0LmxvYWRQdHIoQWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6
b2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBpbnN0cnVjdGlvbkdQUik7CisgICAg
aml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBzY3JhdGNo
R1BSKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIENvZGVCbG9jazo6b2Zm
c2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CisgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhzY3JhdGNoR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9p
bnRlcigpKSwgaW5zdHJ1Y3Rpb25HUFIpOwogICAgIGppdC5hZGRQdHIoaW5jb21pbmdCeXRlY29k
ZU9mZnNldEdQUiwgaW5zdHJ1Y3Rpb25HUFIpOwogCiAgICAgaml0LnNldHVwQXJndW1lbnRzPGRl
Y2x0eXBlKG9wZXJhdGlvblJlc29sdmVTY29wZUZvckJhc2VsaW5lKT4oZ2xvYmFsT2JqZWN0R1BS
LCBpbnN0cnVjdGlvbkdQUik7CkBAIC0yMzExLDggKzIyMDMsMTIgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRv
cihWTSYgdm0KIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnBvcChYODZSZWdpc3RlcnM6OmVi
cCk7Ci0jZWxpZiBDUFUoQVJNNjQpCi0gICAgaml0LnBvcFBhaXIoQ0NhbGxIZWxwZXJzOjpmcmFt
ZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpsaW5rUmVnaXN0ZXIpOworI2VsaWYgQ1BV
KEFSTTY0KSB8fCBDUFUoQVJNX1RIVU1CMikKKyAgICBqaXQucG9wUGFpcihmcmFtZVBvaW50ZXJS
ZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyNlbGlmIENQVShNSVBTKQorICAgIGppdC5wb3BQYWly
KGZyYW1lUG9pbnRlclJlZ2lzdGVyLCByZXR1cm5BZGRyZXNzUmVnaXN0ZXIpOworI2Vsc2UKKyMg
ICBlcnJvciAiTm90IGltcGxlbWVudGVkIG9uIHBsYXRmb3JtIgogI2VuZGlmCiAgICAgaml0LnJl
dCgpOwogCkBAIC0yMzIyLDE3MiArMjIxOCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mIHZtCiAg
ICAgcGF0Y2hCdWZmZXIubGluayhleGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwoaGFu
ZGxlci5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09E
RShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9yZXNvbHZl
X3Njb3BlIik7CiB9Ci0jZW5kaWYgLy8gIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCi12b2lk
IEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBT
dHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQotewotICAgIGxvYWRQdHIoc3RydWN0dXJlU2xvdCwg
cmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgbG9hZDMyKEFkZHJl
c3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9t
UG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcgcmVnKQotewotICAgIGxvYWRQdHIob3Bl
cmFuZCwgcmVnKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVy
KEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcgcmVnKQotewotICAgIGxvYWRQdHIob3BlcmFuZCwg
cmVnKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnKSwgcmVnKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQp
Ci17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVz
KCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwKTsKLX0KLQotI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLXZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzY29w
ZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlw
ZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mby5y
ZXNvbHZlVHlwZSgpOwotCi0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QyOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKLQotICAgIEp1bXBM
aXN0IHNsb3dDYXNlOwotCi0gICAgYXV0byBkb1ZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7Ci0gICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDMpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihK
U0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAg
ICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9p
bnRTZXQ6Om9mZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwot
ICAgIH07Ci0gICAgCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2
ZVR5cGUpIHsKLSAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgICAgICBjYXNlIEds
b2JhbFByb3BlcnR5OgotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogewotICAgICAgICAgICAgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5q
ZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0
aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVj
a2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFk
YXRhKGJ5dGVjb2RlLCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJl
KCksIHJlZ1QxKTsKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2hUZXN0UHRyKFpl
cm8sIHJlZ1QxKSk7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJl
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBw
ZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMSkpOwotCi0gICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFt
YmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICBsb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9i
amVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWws
IHNjb3BlR1BSLCByZWdUMyk7Ci0gICAgICAgICAgICB9KSk7Ci0KLSAgICAgICAgICAgIGxvYWRQ
dHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZPcGVyYW5kKCksIHJlZ1QxKTsKLQotICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7
Ci0gICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFu
T3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwotICAg
ICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7Ci0g
ICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBuZWczMihyZWdUMSk7Ci0gICAgICAgICAg
ICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgICAgICAgICAgbG9hZDY0KEJh
c2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAt
IDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyOgotICAgICAgICBjYXNlIEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZh
cjoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoK
LSAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QwKTsKLSAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCksIHJlZ1QwKTsKLSAgICAgICAgICAgIGlm
IChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAg
ICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDApKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBkb1ZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBs
b2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9m
ZnNldE9mT3BlcmFuZCgpLCByZWdUMyk7Ci0gICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwg
MyA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0z
MigzKSwgcmVnVDMpOwotICAgICAgICAgICAgYWRkUHRyKHNjb3BlR1BSLCByZWdUMyk7Ci0gICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDMsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZz
ZXRPZlZhcmlhYmxlcygpKSwgcmVnVDApOwotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBEeW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6Ci0gICAgICAg
IGNhc2UgTW9kdWxlVmFyOgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICAg
ICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH07Ci0K
LSAgICBpZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFyIHx8IHByb2ZpbGVkUmVz
b2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgIGVt
aXRDb2RlKHByb2ZpbGVkUmVzb2x2ZVR5cGUpOwotICAgIGVsc2UgewotICAgICAgICBKdW1wTGlz
dCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRG
cm9tU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkdldFB1dEluZm8oKSwgcmVnVDApOwotICAgICAg
ICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExv
YWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsVmFyID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsVmFyKSk7Ci0gICAgICAg
IGVtaXRDb2RlKEdsb2JhbFZhcik7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
LSAgICAgICAgbm90R2xvYmFsVmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9i
YWxWYXJXaXRoVmFySW5qZWN0aW9uID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29k
ZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uLmxpbmso
dGhpcyk7Ci0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0g
ICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xv
YmFsUHJvcGVydHkpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAg
IG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExl
eGljYWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5v
dEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAg
ICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBzbG93Q2FzZS5hcHBl
bmQoanVtcCgpKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICB9Ci0KLSAg
ICBhZGRTbG93Q2FzZShzbG93Q2FzZSk7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotfQotCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0KLSAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRz
dCwgYXJndW1lbnRHUFIwLCBpbnN0cnVjdGlvbik7Ci19Ci0KLSNlbHNlCiB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJv
bVNjb3BlPigpOwpAQCAtMjUwMiwxMSArMjIzMywxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
ZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAg
Y29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgc2NvcGVHUFIgPSByZWdUMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0
R1BSID0gcmVnVDU7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJl
Z1QzOwogCiAgICAgdWludDMyX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2Nr
LT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSk7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlclBheWxvYWQoc2NvcGUsIHNjb3BlR1BSKTsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KG1ldGFkYXRhT2Zmc2V0KSwgc19tZXRhZGF0YUdQUiwgbWV0YWRhdGFHUFIpOwogICAgIG1vdmUo
VHJ1c3RlZEltbTMyKGJ5dGVjb2RlT2Zmc2V0KSwgYnl0ZWNvZGVPZmZzZXRHUFIpOwogCkBAIC0y
NTI5LDcgKzIyNjAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBjb2RlID0gdm0uZ2V0Q1RJ
U3R1YihnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bms8R2xvYmFsVmFyPik7CiAKICAgICBlbWl0
TmFrZWROZWFyQ2FsbChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBy
ZXR1cm5WYWx1ZUpTUik7CiB9CiAKIHRlbXBsYXRlIDxSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29s
dmVUeXBlPgpAQCAtMjU0Miw2ICsyMjczLDEwIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtKQogICAg
IHVzaW5nIE1ldGFkYXRhID0gT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhw
ciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUNDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3Bl
R1BSID0gcmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJl
Z1QzOyAvLyBVc2VkIG9ubHkgb24gc2xvdyBwYXRoCisgICAgY29uc3RleHByIEdQUlJlZyBzY3Jh
dGNoR1BSID0gcmVnVDU7CisgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlT2Zmc2V0R1BSKTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChyZXR1cm5WYWx1ZUpTUiwgbWV0YWRhdGFHUFIsIHNj
b3BlR1BSLCBieXRlY29kZU9mZnNldEdQUiwgc2NyYXRjaEdQUikpOwogCiAgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKIApAQCAtMjU1MiwxMCArMjI4NywxMCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiB2bSkK
ICAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MpIHsKICAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVn
VDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0
LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9m
ZnNldE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworICAgICAgICBq
aXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHNjcmF0Y2hH
UFIpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIENvZGVCbG9jazo6
b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92
YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoaml0LmJyYW5jaDgoRXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNl
dDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiAgICAg
fTsKICAgICAKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSkgewpAQCAtMjU2MywyOSArMjI5OCwyOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiB2bSkKICAgICAg
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3Zl
cnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0
aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhh
bmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZlN0cnVjdHVyZSgpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGpp
dC5icmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgICAgICAgICBqaXQubG9hZDMyKEFk
ZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAg
ICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3Mo
c2NvcGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgICAg
ICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBPcEdldEZyb21TY29wZTo6TWV0
YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIHNs
b3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0cihaZXJvLCBzY3JhdGNoR1BSKSk7CisgICAg
ICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
aml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKSk7CiAKICAgICAgICAgICAgIGppdC5qaXRBc3NlcnQo
c2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAg
ICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qz
KTsKLSAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGppdC5icmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCByZWdUMyk7CisgICAgICAgICAgICAgICAg
aml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgICAgIHJldHVybiBqaXQuYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgc2NyYXRjaEdQUik7
CiAgICAgICAgICAgICB9KSk7CiAKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0
YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QxKTsKKyAgICAgICAg
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9w
ZXJhbmQoKSksIHNjcmF0Y2hHUFIpOwogCiAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQp
IHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gaml0LmJyYW5jaDMyKEdyZWF0
ZXJUaGFuT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkp
OworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBqaXQuYnJhbmNoMzIoR3JlYXRl
clRoYW5PckVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQpKTsKICAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90
T3V0T2ZMaW5lKTsKICAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKCZqaXQpOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBqaXQubmVn
MzIocmVnVDEpOwotICAgICAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdU
MSk7Ci0gICAgICAgICAgICBqaXQubG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVz
RWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIGppdC5u
ZWdQdHIoc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFZhbHVlKEJhc2VJbmRleChz
Y29wZUdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0g
MikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmV0dXJuVmFsdWVKU1IpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CkBAIC0yNTkzLDIw
ICsyMzI3LDE2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpn
ZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtKQogICAgICAgICBjYXNlIEdsb2JhbExl
eGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3M6CiAgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1l
dGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMCk7Ci0gICAgICAg
ICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDApOworICAgICAgICAgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgp
KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFZhbHVlKEFkZHJlc3Moc2NyYXRj
aEdQUiksIHJldHVyblZhbHVlSlNSKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBH
bG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGppdC5icmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAgICAgICAgICAgICAgc2xvd0Nh
c2UuYXBwZW5kKGppdC5icmFuY2hJZkVtcHR5KHJldHVyblZhbHVlSlNSKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQo
KSksIHJlZ1QzKTsKLSAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihS
ZWdpc3RlcikpOwotICAgICAgICAgICAgaml0LmxzaGlmdDY0KFRydXN0ZWRJbW0zMigzKSwgcmVn
VDMpOwotICAgICAgICAgICAgaml0LmFkZFB0cihzY29wZUdQUiwgcmVnVDMpOwotICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNl
dE9mVmFyaWFibGVzKCkpLCByZWdUMCk7Ci0KKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MobWV0YWRhdGFHUFIsICBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQmFzZUluZGV4KHNjb3BlR1BSLCBzY3JhdGNo
R1BSLCBUaW1lc0VpZ2h0LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMo
KSksIHJldHVyblZhbHVlSlNSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5
bmFtaWM6CiAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0Lmp1bXAoKSk7CkBAIC0yNjIz
LDExICsyMzUzLDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtKQogICAgICAgICBlbWl0Q29kZShw
cm9maWxlZFJlc29sdmVUeXBlKTsKICAgICBlbHNlIHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRv
RW5kOwotICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpv
ZmZzZXRPZkdldFB1dEluZm8oKSksIHJlZ1QwKTsKLSAgICAgICAgaml0LmFuZDMyKFRydXN0ZWRJ
bW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBp
bnRvIFQwCisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6
Om9mZnNldE9mR2V0UHV0SW5mbygpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGppdC5hbmQzMihU
cnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBzY3JhdGNoR1BSKTsgLy8gTG9hZCBS
ZXNvbHZlVHlwZSBpbnRvIHNjcmF0Y2hHUFIKIAogICAgICAgICBhdXRvIGVtaXRDYXNlV2l0aG91
dENoZWNrID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewotICAgICAgICAgICAgSnVt
cCBub3RDYXNlID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJl
c29sdmVUeXBlKSk7CisgICAgICAgICAgICBKdW1wIG5vdENhc2UgPSBqaXQuYnJhbmNoMzIoTm90
RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwogICAgICAgICAg
ICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwogICAgICAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
aXQuanVtcCgpKTsKICAgICAgICAgICAgIG5vdENhc2UubGluaygmaml0KTsKQEAgLTI2NjEsOCAr
MjM5MSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5l
cmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtKQogICAgIH0KIAogICAgIHN0YXRpY19hc3Nl
cnQoVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgPT0gMSk7Ci0gICAgaml0LnN0b3JlNjQo
cmVnVDAsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKSAr
IFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7Ci0KKyAgICBqaXQuc3RvcmVW
YWx1ZShyZXR1cm5WYWx1ZUpTUiwgQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNl
dE9mUHJvZmlsZSgpICsgVmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKICAg
ICBqaXQucmV0KCk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RI
VU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpUaHVuayk7CkBAIC0yNjgwLDQ5ICsyNDA5LDY2
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dl
dF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJiB2CiAKICNpZiBDUFUoWDg2XzY0KQogICAgIGppdC5w
dXNoKFg4NlJlZ2lzdGVyczo6ZWJwKTsKLSNlbGlmIENQVShBUk02NCkKKyNlbGlmIENQVShBUk02
NCkgfHwgQ1BVKEFSTV9USFVNQjIpCiAgICAgaml0LnB1c2hQYWlyKGZyYW1lUG9pbnRlclJlZ2lz
dGVyLCBsaW5rUmVnaXN0ZXIpOworI2VsaWYgQ1BVKE1JUFMpCisgICAgaml0LnB1c2hQYWlyKGZy
YW1lUG9pbnRlclJlZ2lzdGVyLCByZXR1cm5BZGRyZXNzUmVnaXN0ZXIpOworI2Vsc2UKKyMgICBl
cnJvciAiTm90IGltcGxlbWVudGVkIG9uIHBsYXRmb3JtIgogI2VuZGlmCiAKICAgICB1c2luZyBN
ZXRhZGF0YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsKICAgICBjb25zdGV4cHIgR1BSUmVn
IG1ldGFkYXRhR1BSID0gcmVnVDQ7Ci0gICAgY29uc3RleHByIEdQUlJlZyBpbmNvbWluZ0J5dGVj
b2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgY29uc3RleHByIEdQUlJlZyBpbmNvbWluZ0J5dGVj
b2RlT2Zmc2V0R1BSID0gcmVnVDM7CiAgICAgaml0LnN0b3JlMzIoaW5jb21pbmdCeXRlY29kZU9m
ZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9IGFyZ3VtZW50R1BSMzsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKICAgICBjb25zdGV4cHIg
R1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsKICAgICBjb25zdGV4cHIgR1BS
UmVnIGluc3RydWN0aW9uR1BSID0gYXJndW1lbnRHUFIxOwotICAgIHN0YXRpY19hc3NlcnQoaW5j
b21pbmdCeXRlY29kZU9mZnNldEdQUiAhPSBjb2RlQmxvY2tHUFIpOwotICAgIHN0YXRpY19hc3Nl
cnQoaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiAhPSBnbG9iYWxPYmplY3RHUFIpOwotICAgIHN0
YXRpY19hc3NlcnQoaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiAhPSBpbnN0cnVjdGlvbkdQUik7
Ci0gICAgc3RhdGljX2Fzc2VydChtZXRhZGF0YUdQUiAhPSBjb2RlQmxvY2tHUFIpOwotICAgIHN0
YXRpY19hc3NlcnQobWV0YWRhdGFHUFIgIT0gZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICBzdGF0aWNf
YXNzZXJ0KG1ldGFkYXRhR1BSICE9IGluc3RydWN0aW9uR1BSKTsKKyAgICBzdGF0aWNfYXNzZXJ0
KG5vT3ZlcmxhcChtZXRhZGF0YUdQUiwgaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiwgc2NyYXRj
aEdQUiwgZ2xvYmFsT2JqZWN0R1BSLCBpbnN0cnVjdGlvbkdQUikpOwogCi0gICAgaml0LmxvYWRQ
dHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBjb2RlQmxvY2tHUFIpOwot
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9m
R2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwotICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mSW5zdHJ1Y3Rpb25zUmF3UG9pbnRl
cigpKSwgaW5zdHJ1Y3Rpb25HUFIpOworICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSwgc2NyYXRjaEdQUik7CisgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhzY3JhdGNoR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxP
YmplY3RHUFIpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgQ29kZUJsb2Nr
OjpvZmZzZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSksIGluc3RydWN0aW9uR1BSKTsKICAg
ICBqaXQuYWRkUHRyKGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIsIGluc3RydWN0aW9uR1BSKTsK
IAotICAgIEFTU0VSVChSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpLmNvbnRhaW5z
KEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKSk7Ci0gICAgaml0Lm1vdmUobWV0YWRhdGFHUFIs
IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKTsgLy8gUHJlc2VydmUgbWV0YWRhdGEgaW4gYSBj
YWxsZWUgc2F2ZWQgcmVnaXN0ZXIuCisgICAgLy8gUHJlc2VydmUgbWV0YWRhdGEgaW4gYSBjYWxs
ZWUgc2F2ZWQgcmVnaXN0ZXIuCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBjb25zdGV4cHIgR1BS
UmVnIG1ldGFkYXRhQ1NSID0gR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXI7CisgICAgYXV0byBy
ZXN0b3JlSGlqYWNrZWRDU1IgPSBbJl0oKSB7CisgICAgICAgIGppdC5tb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7CisgICAg
fTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0
YUNTUiA9IHNfbWV0YWRhdGFHUFI7CisgICAgYXV0byByZXN0b3JlSGlqYWNrZWRDU1IgPSBbJl0o
KSB7CisgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgc19tZXRhZGF0YUdQUik7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Moc19tZXRh
ZGF0YUdQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZk1ldGFkYXRhVGFibGUoKSksIHNfbWV0YWRhdGFH
UFIpOworICAgIH07CisjZW5kaWYKKyAgICBBU1NFUlQoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVS
ZWdpc3RlcnMoKS5jb250YWlucyhtZXRhZGF0YUNTUikpOworICAgIGppdC5tb3ZlKG1ldGFkYXRh
R1BSLCBtZXRhZGF0YUNTUik7CisKICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3Bl
cmF0aW9uR2V0RnJvbVNjb3BlKT4oZ2xvYmFsT2JqZWN0R1BSLCBpbnN0cnVjdGlvbkdQUik7CiAg
ICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKICAgICBDYWxsIG9wZXJhdGlvbiA9IGpp
dC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAgSnVtcCBleGNlcHRpb25DaGVjayA9IGppdC5l
bWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2sodm0pOwogCi0gICAgaml0LnN0b3JlNjQocmVn
VDAsIEFkZHJlc3MoR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIsIE1ldGFkYXRhOjpvZmZzZXRP
ZlByb2ZpbGUoKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7Ci0gICAg
aml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyksIEdQUkluZm86Om51bWJl
clRhZ1JlZ2lzdGVyKTsKKyAgICBqaXQuc3RvcmVWYWx1ZShyZXR1cm5WYWx1ZUpTUiwgQWRkcmVz
cyhtZXRhZGF0YUNTUiwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpICsgVmFsdWVQcm9maWxl
OjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKKyAgICByZXN0b3JlSGlqYWNrZWRDU1IoKTsKIAog
I2lmIENQVShYODZfNjQpCiAgICAgaml0LnBvcChYODZSZWdpc3RlcnM6OmVicCk7Ci0jZWxpZiBD
UFUoQVJNNjQpCisjZWxpZiBDUFUoQVJNNjQpIHx8IENQVShBUk1fVEhVTUIyKQogICAgIGppdC5w
b3BQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOworI2VsaWYgQ1BVKE1J
UFMpCisgICAgaml0LnBvcFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIHJldHVybkFkZHJlc3NS
ZWdpc3Rlcik7CisjZWxzZQorIyAgIGVycm9yICJOb3QgaW1wbGVtZW50ZWQgb24gcGxhdGZvcm0i
CiAjZW5kaWYKICAgICBqaXQucmV0KCk7CiAKICAgICBleGNlcHRpb25DaGVjay5saW5rKCZqaXQp
OwotICAgIGppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBHUFJJbmZv
OjpudW1iZXJUYWdSZWdpc3Rlcik7CisgICAgcmVzdG9yZUhpamFja2VkQ1NSKCk7CiAgICAgSnVt
cCBqdW1wVG9IYW5kbGVyID0gaml0Lmp1bXAoKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1
bmspOwpAQCAtMjczMSw3ICsyNDc3LDYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IoVk0mIHYKICAgICBw
YXRjaEJ1ZmZlci5saW5rKGp1bXBUb0hhbmRsZXIsIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIu
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0
Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfZ2V0X2Zyb21fc2Nv
cGUiKTsKIH0KLSNlbmRpZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKIHZvaWQgSklU
OjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewpAQCAtMjc0NywyMyArMjQ5MiwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8v
IFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNo
ZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4KICAgICAgICAg
ICAgIC8vIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0
aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCksIHJlZ1QxKTsK
LSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKLSAgICAgICAg
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZWdUMSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKyAgICAg
ICAgICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyB2YWx1ZUpTUiA9IGpzUmVnVDEwOworICAgICAg
ICAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QyOworICAgICAgICAgICAgY29u
c3RleHByIEdQUlJlZyBzY3JhdGNoR1BSMSA9IHJlZ1QzOworICAgICAgICAgICAgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoR1BSMiA9IHJlZ1Q0OworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChu
b092ZXJsYXAodmFsdWVKU1IsIHNjb3BlR1BSLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIpKTsK
KyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6
TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJlKCksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHNjcmF0Y2hHUFIxKSk7CisgICAg
ICAgICAgICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoR1BSMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHNjcmF0Y2hHUFIxKSk7CiAKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
dmFsdWUsIHJlZ1QyKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHZhbHVlSlNSKTsKIAogICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZv
aWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgbG9hZEdsb2JhbE9iamVjdChy
ZWdUMyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJl
Z1QzKTsKKyAgICAgICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHNjcmF0Y2hHUFIyKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgc2NyYXRjaEdQ
UjIpOwogICAgICAgICAgICAgfSkpOwogCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICAgICAgICAgIGxv
YWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNl
dE9mT3BlcmFuZCgpLCByZWdUMSk7Ci0gICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAg
ICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMywgcmVnVDEsIFRpbWVzRWlnaHQs
IChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwor
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgc2Ny
YXRjaEdQUjEpOworICAgICAgICAgICAgbmVnUHRyKHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAg
IHN0b3JlVmFsdWUodmFsdWVKU1IsIEJhc2VJbmRleChzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjEs
IFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSkpOwogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNo
b3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yNzcx
LDIyICsyNTIxLDIzIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAg
ICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAg
ICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFZhclJlYWRPbmx5Q2hlY2socmVzb2x2
ZVR5cGUsIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKGpzUmVn
VDEwLCByZWdUMiwgcmVnVDMpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QyKTsKKyAgICAgICAgICAg
IGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlLCByZWdUMik7CiAKLSAgICAgICAgICAg
IGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9m
ZnNldE9mT3BlcmFuZCgpLCByZWdUMCk7CisgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVn
VDIpOwogCiAgICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oYnl0ZWNvZGUubV9nZXRQ
dXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4
aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNr
IGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBj
aGVja3Mgc3RhdGljYWxseS4KLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAp
LCByZWdUMSk7Ci0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdU
MSkpOworICAgICAgICAgICAgICAgIGxvYWRWYWx1ZShBZGRyZXNzKHJlZ1QyKSwganNSZWdUMTAp
OworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkoanNSZWdUMTApKTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29k
ZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1Qx
KTsKLSAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDEpOworICAgICAg
ICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0
YTo6b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QzKTsKKyAgICAgICAgICAgIGVtaXROb3Rp
ZnlXcml0ZVdhdGNocG9pbnQocmVnVDMpOwogCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNz
KHJlZ1QwKSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBqc1Jl
Z1QxMCk7CisgICAgICAgICAgICBzdG9yZVZhbHVlKGpzUmVnVDEwLCBBZGRyZXNzKHJlZ1QyKSk7
CiAKICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI3OTQsMTQgKzI1NDUsMTUgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgogICAgICAgICBjYXNl
IENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KG5v
T3ZlcmxhcChqc1JlZ1QxMCwgcmVnVDIsIHJlZ1QzKSk7CisgICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMyk7
CiAKLSAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29w
ZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMCk7CisgICAgICAgICAg
ICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDMpOwogICAgICAgICAgICAgbG9hZFB0ckZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5k
KCksIHJlZ1QyKTsKLSAgICAgICAgICAgIGVtaXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDAp
OwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgICAgICAg
ICAgc3RvcmU2NChyZWdUMSwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNFaWdodCwgSlNM
ZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpKTsKKyAgICAgICAgICAgIGVt
aXROb3RpZnlXcml0ZVdhdGNocG9pbnQocmVnVDMpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwganNSZWdUMTApOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlclBheWxvYWQoc2NvcGUsIHJlZ1QzKTsKKyAgICAgICAgICAgIHN0b3JlVmFsdWUoanNS
ZWdUMTAsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIEpTTGV4aWNhbEVudmly
b25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSk7CiAKICAgICAgICAgICAgIGVtaXRXcml0ZUJh
cnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVh
azsKQEAgLTI5NDgsMTAgKzI3MDAsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJn
dW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVh
bFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRl
eCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAgICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihh
cmd1bWVudHMsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1l
bnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1Qw
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlclBheWxvYWQoYXJndW1lbnRzLCByZWdUMCk7CisgICAgbG9hZFZhbHVlKEFkZHJlc3Mo
cmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSksIGpzUmVnVDEwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCBqc1JlZ1QxMCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIGpzUmVnVDEwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjk2MCw1MSArMjcxMiwx
NSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9IGJ5
dGVjb2RlLm1fYXJndW1lbnRzOwogICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJl
Z1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdy
aXRlQmFycmllcjxVbmtub3duPikpKTsKKworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKHJl
Z1QyLCBqc1JlZ1QxMCkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGFyZ3Vt
ZW50cywgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGpzUmVnVDEw
KTsKKyAgICBzdG9yZVZhbHVlKGpzUmVnVDEwLCBBZGRyZXNzKHJlZ1QyLCBEaXJlY3RBcmd1bWVu
dHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikpKTsKIAogICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOwogfQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0
ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQot
ewotICAgIC8vIHZhbHVlIG1heSBiZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBpZiBtb2RlIGlz
IFVuY29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4KLSAgICBKdW1w
IHZhbHVlTm90Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2Rl
ID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMCk7Ci0gICAgfQotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3du
ZXIsIHJlZ1QwKTsKLSAgICBKdW1wIG93bmVyTm90Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91
bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQotICAgICAg
ICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgSnVtcCBvd25l
cklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgpLCByZWdUMCwgcmVnVDEp
OwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbldyaXRlQmFycmll
clNsb3dQYXRoLCAmdm0oKSwgcmVnVDApOwotICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4u
bGluayh0aGlzKTsKLQotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8
fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCi0gICAgICAgIG93bmVyTm90Q2VsbC5saW5rKHRo
aXMpOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxk
RmlsdGVyQmFzZUFuZFZhbHVlKSAKLSAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7Ci19
Ci0KLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQotewotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIHZhbHVlTm90Q2VsbDsKLSAgICBpZiAo
bW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIGVtaXRXcml0ZUJhcnJpZXIob3duZXIpOwotCi0gICAg
aWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIAotICAgICAgICB2YWx1ZU5vdENlbGwubGlu
ayh0aGlzKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwpAQCAtMzAxMiwx
MSArMjcyOCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5k
ZXg7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QxKTsKLSAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDEsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJ
bnRlcm5hbEZpZWxkKGluZGV4KSksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
UGF5bG9hZChiYXNlLCByZWdUMCk7CisgICAgbG9hZFZhbHVlKEFkZHJlc3MocmVnVDAsIEpTSW50
ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSksIGpz
UmVnVDEwKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1QwKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzAyNiwxMiArMjc0Miwx
NSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhy
ZWdUMCwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQo
aW5kZXgpKSk7CisgICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAocmVnVDIsIGpzUmVnVDEwKSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYmFzZSwgcmVnVDIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGpzUmVnVDEwKTsKKyAgICBzdG9yZVZhbHVlKGpz
UmVnVDEwLCBBZGRyZXNzKHJlZ1QyLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNl
dE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZh
bHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigpOwpAQCAtMzI2OCwxOCArMjk4Nyw5
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdAogICAgIGVtaXRfZW51bWVyYXRvcl9oYXNfcHJv
cGVydHlJbXBsKGN1cnJlbnRJbnN0cnVjdGlvbiwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVu
dW1lcmF0b3JIYXNPd25Qcm9wZXJ0eT4oKSwgc2xvd19wYXRoX2VudW1lcmF0b3JfaGFzX293bl9w
cm9wZXJ0eSk7CiB9CiAKLSNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCisjZWxpZiBVU0UoSlNWQUxV
RTMyXzY0KQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2Fs
bCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZ2V0X3By
b3BlcnR5X2VudW1lcmF0b3IpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQg
SklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3Vy
cmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW51bWVyYXRvcl9uZXh0KTsKKyAgICBzbG93UGF0
aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93
UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRo
X2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQoreworICAgIFVOUkVBQ0hB
QkxFX0ZPUl9QTEFURk9STSgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2lu
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJ
VFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93
X3BhdGhfZW51bWVyYXRvcl9pbl9ieV92YWwpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9
CisKK3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBz
bG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW51bWVyYXRv
cl9oYXNfb3duX3Byb3BlcnR5KTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCisjZW5k
aWYKKworI2lmIFVTRShKU1ZBTFVFNjQpCiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZp
cnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJN
b2RlIG1vZGUpCiB7CiAgICAgLy8gdmFsdWUgbWF5IGJlIGludmFsaWQgVmlydHVhbFJlZ2lzdGVy
IGlmIG1vZGUgaXMgVW5jb25kaXRpb25hbFdyaXRlQmFycmllciBvciBTaG91bGRGaWx0ZXJCYXNl
LgogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZh
bHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7Ci0gICAgICAgIGVtaXRM
b2FkVGFnKHZhbHVlLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKICAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKICAgICB9Ci0gICAgCi0gICAgZW1pdExvYWQob3duZXIsIHJlZ1QwLCByZWdUMSk7CisKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCk7CisgICAgSnVtcCBvd25lck5v
dENlbGw7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUg
PT0gU2hvdWxkRmlsdGVyQmFzZSkKKyAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKTsKKworICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJp
ZXJCcmFuY2godm0oKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRp
b25DaGVjayhvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZtKCksIHJlZ1QwKTsKKyAg
ICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7CisKKyAgICBpZiAobW9kZSA9
PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQor
ICAgICAgICBvd25lck5vdENlbGwubGluayh0aGlzKTsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRG
aWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkKKyAgICAgICAg
dmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVy
KEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBt
b2RlKQoreworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBK
dW1wIHZhbHVlTm90Q2VsbDsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKKyAg
ICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgIGVtaXRX
cml0ZUJhcnJpZXIob3duZXIpOworCisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUp
CisgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOworfQorCisjZWxpZiBVU0UoSlNWQUxV
RTMyXzY0KQorCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3du
ZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQoreworICAg
IC8vIHZhbHVlIG1heSBiZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBpZiBtb2RlIGlzIFVuY29u
ZGl0aW9uYWxXcml0ZUJhcnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4KKyAgICBKdW1wIHZhbHVl
Tm90Q2VsbDsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNo
b3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
VGFnKHZhbHVlLCByZWdUMCk7CisgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMCk7CisgICAgfQorCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVn
VDAsIHJlZ1QxKTsKICAgICBKdW1wIG93bmVyTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91
bGRGaWx0ZXJCYXNlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKQogICAgICAg
ICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtMzI5MCw3ICszMDg3
LDcgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmEKIAogICAgIGlmIChtb2RlID09IFNob3VsZEZp
bHRlckJhc2UgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpCiAgICAgICAgIG93
bmVyTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVl
IHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSAKKyAgICBpZiAobW9kZSA9PSBT
aG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkKICAg
ICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKQEAgLTMyOTgsMTcgKzMwOTUsMTcg
QEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2QKIHsKICAgICBKdW1wIHZhbHVlTm90Q2VsbDsKICAg
ICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgewotICAgICAgICBlbWl0TG9hZFRhZyh2
YWx1ZSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZhbHVlLCBy
ZWdUMCk7CiAgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAg
ICAgfQogCiAgICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7CiAKLSAgICBpZiAobW9kZSA9PSBT
aG91bGRGaWx0ZXJWYWx1ZSkgCisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpCiAg
ICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwogfQogCi0jZW5kaWYgLy8gVVNFKEpTVkFM
VUU2NCkKKyNlbmRpZgogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0
ZXIgb3duZXIsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjNjBiNjMyZTk0ZDFkZWYyZjQyMzBmMGE4NGJlODM2Y2ZkNzM1MmEx
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw2NDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0j
aWYgVVNFKEpTVkFMVUUzMl82NCkKLSNpbmNsdWRlICJKSVQuaCIKLQotI2luY2x1ZGUgIkNhY2hl
YWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVk
ZSAiRGlyZWN0QXJndW1lbnRzLmgiCi0jaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgi
Ci0jaW5jbHVkZSAiSW50ZXJwcmV0ZXJJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSklUSW5saW5lcy5o
IgotI2luY2x1ZGUgIkpTQXJyYXkuaCIKLSNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCi0jaW5jbHVk
ZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKLSNpbmNsdWRlICJKU1Byb21pc2UuaCIKLSNpbmNs
dWRlICJMaW5rQnVmZmVyLmgiCi0jaW5jbHVkZSAiT3Bjb2RlSW5saW5lcy5oIgotI2luY2x1ZGUg
IlJlc3VsdFR5cGUuaCIKLSNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKLSNpbmNsdWRlICJTdHJ1
Y3R1cmVTdHViSW5mby5oIgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgotCi0K
LW5hbWVzcGFjZSBKU0MgewotICAgIAotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlJZD4oKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBpbnQgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGludCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOwotICAgIFZpcnR1YWxSZWdpc3RlciBnZXR0ZXIgPSBieXRlY29kZS5tX2FjY2Vzc29y
OwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKLSAgICBlbWl0TG9hZFBheWxv
YWQoZ2V0dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJC
eUlkLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fcHJvZmls
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDMp
OwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7Ci0gICAgaW50IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHNldHRlciA9IGJ5dGVjb2RlLm1fYWNjZXNzb3I7Ci0KLSAgICBlbWl0TG9h
ZFBheWxvYWQoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1Qz
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgbV9wcm9maWxlZENvZGVCbG9jay0+aWRl
bnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHk7Ci0gICAgaW50IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGdldHRlciA9IGJ5dGVjb2RlLm1fZ2V0dGVyOwotICAgIFZpcnR1YWxSZWdp
c3RlciBzZXR0ZXIgPSBieXRlY29kZS5tX3NldHRlcjsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChi
YXNlLCByZWdUMSk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOwotICAgIGVt
aXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1Q0KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dEdldHRlclNldHRlciwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJl
Z1QxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIGF0
dHJpYnV0ZXMsIHJlZ1QzLCByZWdUNCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0
ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeVZhbD4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGludDMyX3Qg
YXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
Z2V0dGVyID0gYnl0ZWNvZGUubV9hY2Nlc3NvcjsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChiYXNl
LCByZWdUMik7Ci0gICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1p
dExvYWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0R2V0dGVyQnlWYWwsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdU
MiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgYXR0cmlidXRlcywgcmVnVDMpOwotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0U2V0dGVyQnlWYWw+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUu
bV9wcm9wZXJ0eTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNldHRlciA9IGJ5dGVjb2RlLm1fYWNjZXNzb3I7Ci0K
LSAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDIpOwotICAgIGVtaXRMb2FkKHByb3BlcnR5
LCByZWdUMSwgcmVnVDApOwotICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1QzKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCBtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDIsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIGF0
dHJpYnV0ZXMsIHJlZ1QzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0
dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQotewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgcmVnVDApOwotICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpLCByZWdUMSk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKHNjb3BlLCBy
ZWdUMCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoOyArK2kpCi0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7
Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRf
b3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQot
ewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNj
b3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxl
ZENvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwotICAgIHVuc2lnbmVk
IGRlcHRoID0gbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7Ci0KLSAgICBhdXRvIGVtaXRDb2Rl
ID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewotICAgICAgICBzd2l0Y2ggKHJlc29s
dmVUeXBlKSB7Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3Bl
KiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNv
bHZlVHlwZSwgbV9wcm9maWxlZENvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxv
YWQzMigmbWV0YWRhdGEubV9nbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoLCByZWdUMSk7Ci0gICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1f
cHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hZGRyZXNzT2ZHbG9iYWxMZXhpY2Fs
QmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QxKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVn
VDEsIHJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2Fz
ZSBHbG9iYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
czogCi0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSog
Y29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2
ZVR5cGUsIG1fcHJvZmlsZWRDb2RlQmxvY2spOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Y29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDEpOwotICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0
U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKGRzdCwgc2Nv
cGUsIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZGVwdGgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QxKTsKLSAgICAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1Qw
KTsKLSAgICAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3Vy
ZVZhcjoKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgVW5y
ZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9OwotICAgIHN3aXRjaCAo
cmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNhc2UgR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBU
b0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdUMCk7Ci0K
LSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVU
eXBlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIG5vdEds
b2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhcik7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhp
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToK
LSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAg
ICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVz
b2x2ZVR5cGUsIHJlZ1QwKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAg
ICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHkpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5k
KGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0KLSAgICAg
ICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1
bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNh
bFZhcik7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xv
YmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAg
ZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNr
KFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkKLXsKLSAg
ICBlbWl0TG9hZChzY29wZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKHN0cnVjdHVyZVNs
b3QsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnIHRhZywg
R1BSUmVnIHBheWxvYWQpCi17Ci0gICAgdWludHB0cl90IHJhd0FkZHJlc3MgPSBiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihvcGVyYW5kKTsKLSAgICBsb2FkMzIoYml0d2lzZV9jYXN0PHZvaWQqPihy
YXdBZGRyZXNzICsgVGFnT2Zmc2V0KSwgdGFnKTsKLSAgICBsb2FkMzIoYml0d2lzZV9jYXN0PHZv
aWQqPihyYXdBZGRyZXNzICsgUGF5bG9hZE9mZnNldCksIHBheWxvYWQpOwotfQotdm9pZCBKSVQ6
OmVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcg
dGFnLCBHUFJSZWcgcGF5bG9hZCkKLXsKLSAgICBsb2FkUHRyKG9wZXJhbmQsIHBheWxvYWQpOwot
ICAgIGxvYWQzMihBZGRyZXNzKHBheWxvYWQsIFRhZ09mZnNldCksIHRhZyk7Ci0gICAgbG9hZDMy
KEFkZHJlc3MocGF5bG9hZCwgUGF5bG9hZE9mZnNldCksIHBheWxvYWQpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdEdldENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3Bl
cmFuZCkKLXsKLSAgICBlbWl0TG9hZChzY29wZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBsb2FkMzIo
QWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkg
KyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSArIFRhZ09mZnNldCksIHJlZ1QxKTsKLSAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFi
bGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpLCByZWdU
MCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0
ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1f
Z2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3Qg
PSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xv
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7Ci0g
ICAgCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJv
b2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgewotICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBl
KSB7Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhT
dHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBj
b3ZlcnMgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVnVDI7Ci0g
ICAgICAgICAgICBHUFJSZWcgcmVzdWx0VGFnID0gcmVnVDE7Ci0gICAgICAgICAgICBHUFJSZWcg
cmVzdWx0UGF5bG9hZCA9IHJlZ1QwOwotICAgICAgICAgICAgR1BSUmVnIG9mZnNldCA9IHJlZ1Qz
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtb3ZlKHJlZ1QwLCBiYXNlKTsKLSAgICAgICAg
ICAgIGxvYWQzMihvcGVyYW5kU2xvdCwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChBU1NFUlRf
RU5BQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihH
cmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zm
c2V0KSk7Ci0gICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0
T2ZMaW5lKTsKLSAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIGJhc2UpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAg
ICAgICAgIGxvYWQzMihCYXNlSW5kZXgoYmFzZSwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkgKyAoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHRQYXlsb2FkKTsKLSAgICAg
ICAgICAgIGxvYWQzMihCYXNlSW5kZXgoYmFzZSwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSArIChmaXJzdE91dE9mTGluZU9mZnNldCAt
IDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdFRhZyk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdsb2JhbFZhcjoKLSAgICAgICAgY2FzZSBH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICBjYXNlIEdsb2JhbExleGlj
YWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2Fk
Rm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRl
cihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QxLCByZWdUMCk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJp
dHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDEsIHJlZ1QwKTsKLSAgICAg
ICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBl
ID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2su
Ci0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsK
LSAgICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGp1bXAoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNb2R1bGVW
YXI6Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigm
bWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0z
MihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRv
IFQwCi0KLSAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUo
cmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwot
Ci0gICAgICAgIGlzTm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENv
ZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBs
b2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVz
dGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5
cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykp
OwotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgp
KTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMp
OwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENv
ZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVt
cCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotCi0gICAgICAg
IEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0g
ICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwot
Ci0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmso
dGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVt
aXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
KTsKLSAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZSwgb3Bl
cmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZh
cmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCogc2V0KQotewotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwotICAgIGVt
aXROb3RpZnlXcml0ZShzZXQpOwotICAgIHVpbnRwdHJfdCByYXdBZGRyZXNzID0gYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4ob3BlcmFuZCk7Ci0gICAgc3RvcmUzMihyZWdUMSwgYml0d2lzZV9jYXN0
PHZvaWQqPihyYXdBZGRyZXNzICsgVGFnT2Zmc2V0KSk7Ci0gICAgc3RvcmUzMihyZWdUMCwgYml0
d2lzZV9jYXN0PHZvaWQqPihyYXdBZGRyZXNzICsgUGF5bG9hZE9mZnNldCkpOwotfQotCi12b2lk
IEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9w
ZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0
Y2hwb2ludFNldCkKLXsKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBs
b2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDIpOwotICAgIGVtaXROb3RpZnlXcml0
ZSgqaW5kaXJlY3RXYXRjaHBvaW50U2V0KTsgLy8gRklYTUU6ID8/Ci0gICAgbG9hZFB0cihhZGRy
ZXNzT2ZPcGVyYW5kLCByZWdUMik7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMiwg
VGFnT2Zmc2V0KSk7Ci0gICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhyZWdUMiwgUGF5bG9hZE9m
ZnNldCkpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoVmlydHVhbFJlZ2lzdGVy
IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBv
aW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdExvYWQodmFsdWUsIHJlZ1QzLCByZWdUMik7Ci0gICAg
ZW1pdExvYWQoc2NvcGUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7
Ci0gICAgc3RvcmUzMihyZWdUMywgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6
Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSArIFRhZ09m
ZnNldCkpOwotICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmly
b25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3Rlcikg
KyBQYXlsb2FkT2Zmc2V0KSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwotICAgIFZp
cnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8g
PSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm87Ci0g
ICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Ci0g
ICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNsb3Qo
KTsKLSAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKLSAgICAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZd
IChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7
Ci0gICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eToKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0gICAgICAgICAgICBlbWl0
TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVy
ZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIGVtaXRMb2FkKHZhbHVl
LCByZWdUMywgcmVnVDIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAg
ICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKLSAgICAgICAgICAgIG5lZ1B0cihyZWdU
MSk7Ci0gICAgICAgICAgICBzdG9yZTMyKHJlZ1QzLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBU
aW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRh
ZykpKTsKLSAgICAgICAgICAgIHN0b3JlMzIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEs
IFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
cGF5bG9hZCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
R2xvYmFsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29u
c3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5
cGUsIG1fcHJvZmlsZWRDb2RlQmxvY2spOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29u
c3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUs
IHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7Ci0gICAg
ICAgICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSwgcmVnVDApOwotICAgICAg
ICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2Rl
KCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewotICAgICAgICAgICAg
ICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFs
d2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgotICAgICAg
ICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAg
ICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihv
cGVyYW5kU2xvdCksIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUq
Pigqb3BlcmFuZFNsb3QpLCByZWdUMSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxW
YXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFs
dWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpv
cGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6Ci0g
ICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7Ci0gICAgICAgICAg
ICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwgbWV0YWRhdGEu
bV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1vZHVs
ZVZhcjoKLSAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVt
cCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eToKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQot
ICAgIH07Ci0KLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewot
ICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9n
ZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZv
Ojp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAg
ICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgSnVtcCBpc0dsb2JhbExleGljYWxWYXIgPSBi
cmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6
IEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsgLy8gRHlu
YW1pYywgaXQgY2FuIGhhcHBlbiBpZiB3ZSBhdHRlbXB0IHRvIHB1dCBhIHZhbHVlIHRvIGFscmVh
ZHktaW5pdGlhbGl6ZWQgY29uc3QgYmluZGluZy4KLQotICAgICAgICBpc0dsb2JhbExleGljYWxW
YXIubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBH
bG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkp
OwotCi0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENv
ZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBj
YXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAg
SnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5m
bywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJp
dHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAg
aXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBpc0dsb2JhbFByb3BlcnR5
LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7Ci0g
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFs
TGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4
aWNhbFZhci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENv
ZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwotICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90
b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRv
U2NvcGU+KCk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0
YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBp
ZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7Ci0gICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBz
bG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfdGhyb3dfc3Ry
aWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJyb3IpOwotICAgICAgICBzbG93UGF0
aENhbGwuY2FsbCgpOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dFRvU2NvcGUsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjdXJyZW50
SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21Bcmd1bWVudHM+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKLSAgICBpbnQgaW5kZXggPSBieXRl
Y29kZS5tX2luZGV4OwotCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCk7Ci0gICAgCi0gICAgZW1pdExvYWRQYXlsb2FkKGFyZ3VtZW50cywgcmVn
VDApOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VP
ZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBUYWdPZmZz
ZXQpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgRGly
ZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJp
ZXI8VW5rbm93bj4pICsgUGF5bG9hZE9mZnNldCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKLSAgICBl
bWl0U3RvcmUoZHN0LCByZXN1bHRSZWdzLnRhZ0dQUigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIo
KSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dFRvQXJndW1lbnRzPigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKLSAgICBpbnQgaW5kZXggPSBieXRl
Y29kZS5tX2luZGV4OwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWU7Ci0gICAgCi0gICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRG
aWx0ZXJWYWx1ZSk7Ci0gICAgCi0gICAgZW1pdExvYWRQYXlsb2FkKGFyZ3VtZW50cywgcmVnVDAp
OwotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDIpOwotICAgIHN0b3JlMzIocmVnVDEs
IEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXgg
KiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIFRhZ09mZnNldCkpOwotICAgIHN0b3Jl
MzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgp
ICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIFBheWxvYWRPZmZzZXQp
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwotICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKLSAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0K
LSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsK
LQotICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDIsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxk
KGluZGV4KSArIFRhZ09mZnNldCksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOwotICAgIGxvYWQzMihB
ZGRyZXNzKHJlZ1QyLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJu
YWxGaWVsZChpbmRleCkgKyBQYXlsb2FkT2Zmc2V0KSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkp
OwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwotICAg
IGVtaXRTdG9yZShkc3QsIHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQ
UigpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRJbnRlcm5hbEZpZWxkPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2lu
ZGV4OwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZCh2
YWx1ZSwgcmVnVDEsIHJlZ1QyKTsKLSAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBK
U0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkg
KyBUYWdPZmZzZXQpKTsKLSAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBKU0ludGVy
bmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkgKyBQYXls
b2FkT2Zmc2V0KSk7Ci0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvcGVydHlfZW51bWVyYXRv
cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
Z2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhp
cywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW51bWVyYXRvcl9uZXh0KTsKLSAgICBz
bG93UGF0aENhbGwuY2FsbCgpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dl
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBK
SVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xv
d19wYXRoX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsK
LX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQotewotICAgIFVO
UkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJh
dG9yX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9u
LCBzbG93X3BhdGhfZW51bWVyYXRvcl9pbl9ieV92YWwpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxs
KCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIEpJVFNsb3dQYXRo
Q2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW51
bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCi0jZW5k
aWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SlNJbnRlcmZhY2VKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VK
SVQuaAppbmRleCA3Y2ExYjRlN2MzZmQwODRkZDI3YWMzODUwNmFhOWM2YWVkOTVkZWIwLi5mMTg2
ZmI4MmIxZmY5NzhkOGY2N2E0ZjA1MzM4ZTljZmI0YzgyMzc0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCkBAIC0zNiw3ICszNiw3IEBACiAjaWYgRU5BQkxF
KEpJVCkKIAogbmFtZXNwYWNlIEpTQyB7Ci0gICAgY2xhc3MgSlNJbnRlcmZhY2VKSVQgOiBwdWJs
aWMgQ0NhbGxIZWxwZXJzLCBwdWJsaWMgR1BSSW5mbywgcHVibGljIEZQUkluZm8geworICAgIGNs
YXNzIEpTSW50ZXJmYWNlSklUIDogcHVibGljIENDYWxsSGVscGVycywgcHVibGljIEdQUkluZm8s
IHB1YmxpYyBKU1JJbmZvLCBwdWJsaWMgRlBSSW5mbyB7CiAgICAgcHVibGljOgogCiAgICAgICAg
IEpTSW50ZXJmYWNlSklUKFZNKiB2bSA9IG51bGxwdHIsIENvZGVCbG9jayogY29kZUJsb2NrID0g
bnVsbHB0cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNw
cAppbmRleCAyOTcxNDdlMWM0YzA4ZGNjZDVmN2I3ODY0MTFkODU1YjJhMWRlNDdjLi5iODQwZWM1
ODU5ZDYyMDA3MWI2ZDg4YzQzYmI4ZTk4YjQ3MjllMmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCkBAIC00MSw4ICs0MSw2IEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCi0jaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0KIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2
bSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpAQCAtNjEsNiArNTksOCBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYg
dm0pCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFn
LCAiaGFuZGxlRXhjZXB0aW9uIik7CiB9CiAKKyNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
KwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25X
aXRoQ2FsbEZyYW1lUm9sbGJhY2tHZW5lcmF0b3IoVk0mIHZtKQogewogICAgIENDYWxsSGVscGVy
cyBqaXQ7CkBAIC03NywxNCArNzcsMjAgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tHZW5lcmEKICAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJoYW5kbGVF
eGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2siKTsKIH0KIAorI2VuZGlmCisKIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhh
bmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsK
IAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMigyICogc2l6ZW9mKENQVVJlZ2lzdGVyKSksIFg4NlJlZ2lzdGVyczo6ZXNwKTsKLSNlbGlm
IENQVShBUk02NCkKKyNlbGlmIENQVShBUk02NCkgfHwgQ1BVKEFSTV9USFVNQjIpCiAgICAgaml0
LnBvcFBhaXIoQ0NhbGxIZWxwZXJzOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJz
OjpsaW5rUmVnaXN0ZXIpOworI2VsaWYgQ1BVKE1JUFMpCisgICAgaml0LnBvcFBhaXIoQ0NhbGxI
ZWxwZXJzOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpyZXR1cm5BZGRyZXNz
UmVnaXN0ZXIpOworI2Vsc2UKKyMgICBlcnJvciAiTm90IGltcGxlbWVudGVkIG9uIHBsYXRmb3Jt
IgogI2VuZGlmCiAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgY29udGludWF0aW9uID0gaml0Lmp1
bXAoKTsKQEAgLTk1LDYgKzEwMSw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gcG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlCiAgICAgcmV0
dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAicG9wVGh1bmtT
dGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbiIpOwogfQogCisjaWYgRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCisKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAppbmRleCAwZjlmNmUy
ZDM2ZjZkZDIzZTE4NzI2YWNlNjMxNGEzMGEyMDFkYmNlLi4yMjc4ZTgwNGNlMDU0NGE3YmU1YTc4
YTdlODNmZjVjYWNmZGRjN2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtH
ZW5lcmF0b3JzLmgKQEAgLTM3LDEyICszNywxMiBAQCBjbGFzcyBWTTsKIAogI2lmIEVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tHZW5lcmF0
b3IoVk0mKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcG9wVGh1bmtT
dGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOwogCiAjZW5kaWYg
Ly8gRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVF
eGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IoVk0mKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443817</attachid>
            <date>2021-11-10 07:11:44 -0800</date>
            <delta_ts>2021-11-15 06:08:07 -0800</delta_ts>
            <desc>fixed jnstricteq</desc>
            <filename>bug-232624-20211110151141.patch</filename>
            <type>text/plain</type>
            <size>224679</size>
            <attacher name="Geza Lore">glore</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MTJjYjM0NzU4NTc2NDdhOWNhNTgyMWIxYzIyZjdkNGI5NDZmMjM0Li4wMGE5OWNhYmFlZjVlYmI5
ZjBiOWRjYjdkNThlYWQ0ZDc3YzdiYmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODggQEAKKzIwMjEtMTEtMTAgIEdlemEgTG9yZSAgPGdsb3JlQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0pTQ10gRW5hYmxlIHNoYXJpbmcgb2YgdW5saW5rZWQgYmFzZWxpbmUgY29kZSBv
biBKU1ZBTFVFMzJfNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzMjYyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggY29udGFpbnMgYSBmZXcgZGlmZmVyZW50IGNoYW5nZXMsIHdoaWNo
IHRha2VuIHRvZ2V0aGVyCisgICAgICAgIGVuYWJsZSB0aGUgc2hhcmluZyBvZiB0aGUgdW5saW5r
ZWQgYmFzZWxpbmUgSklUIGNvZGUgYmV0d2VlbiBkaWZmZXJlbnQKKyAgICAgICAgQ29kZUJsb2Nr
cyBvbiBKU1ZBTFVFMzJfNjQgcGxhdGZvcm1zICh0aGUgc2FtZSB3YXkgYXMgdGhpcyBjb2RlIGlz
CisgICAgICAgIHNoYXJlZCBvbiBKU1ZBTFVFNjQgcGxhdGZvcm1zKS4KKworICAgICAgICAxLiBB
IGxvdCBvZiBiYXNlbGluZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIG9wY29kZXMgdGhhdCBuZWVk
ZWQKKyAgICAgICAgY2hhbmdpbmcgZm9yIHRoZSB1bmxpbmtlZCBiYXNlbGluZSBhcmUgbm93IHVu
aWZpZWQgYmV0d2VlbiB0aGUKKyAgICAgICAgSlNWQUxVRTY0IGFuZCBKU1ZBTFVFMzJfNjQgcGxh
dGZvcm1zLiBOb3RlIHRoYXQgd2hpbGUgdGhpcyByZXF1aXJlZAorICAgICAgICBhZGRpbmcgc29t
ZSBhYnN0cmFjdGlvbiwgdGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBiYXNlbGluZSBKSVQgc2hv
dWxkCisgICAgICAgIGJlIGlkZW50aWNhbCB1c2luZyB0aGlzIGFic3RyYWN0aW9uIGNvbXBhcmVk
IHRvIGJlZm9yZS4KKworICAgICAgICAyLiBJIGFkZGVkIGEgSlNSSW5mbyBjbGFzcyB3aGljaCBk
ZWZpbmVzIHN0YW5kYXJkIG5hbWVzIGZvciBjZXJ0YWluCisgICAgICAgIEpTVmFsdWVSZWcgaW5z
dGFuY2VzLiBUaGlzIGVuYWJsZXMgYSBsb3Qgb2YgdGhlIHVuaWZpY2F0aW9uIGluIHRoZQorICAg
ICAgICBwb2ludCBhYm92ZSB0byBiZSBhIHNpbXBsZSB0cmFuc2Zvcm1hdGlvbi4gQWdhaW4sIHRo
aXMgc2hvdWxkIGhhdmUgbm8KKyAgICAgICAgaW1wYWN0IG9uIHRoZSBnZW5lcmF0ZWQgY29kZSBv
biBKU1ZBTFVFNjQsIGFwYXJ0IGZyb20gc29tZSByZWdpc3RlcgorICAgICAgICBzdWJzdGl0dXRp
b25zLgorCisgICAgICAgIDMuIFRoZSBzaXplcyBvZiB0aGUgcmVzb2x2ZV9zY29wZSBhbmQgZ2V0
X2Zyb21fc2NvcGUgb3BzIGluY3JlYXNlZAorICAgICAgICBzaWduaWZpY2FudGx5IHdpdGggdGhl
IHVubGlua2VkIGJhc2VsaW5lLiBUaGlzIGNhbiBjYXVzZSBpc3N1ZXMgb24KKyAgICAgICAgc29t
ZSBKU1ZBTFVFMzJfNjQgdGFyZ2V0cyB3aGVyZSBtZW1vcnkgaXMgbW9yZSBwcmVjaW91cywgc28g
Zm9yIHRoZXNlCisgICAgICAgIHR3byBvcHMgSSBzd2FwcGVkIGluIHRoZSBpbXBsZW1lbnRhdGlv
bnMgdW5kZXIgRVhUUkFfQ1RJX1RIVU5LUywgd2hpY2gKKyAgICAgICAgaW1wbGVtZW50IHRoZXNl
IHVzaW5nIHNoYXJlZCBzdHVicy4gVGhlc2Ugc3R1YnMgd29yayBvbiBhbGwgcGxhdGZvcm1zCisg
ICAgICAgIHRoYXQgc3VwcG9ydCBFTkFCTEUoSklUKSwgc28gdGhleSBhcmUgbm93IHRoZSBvbmx5
IGltcGxlbWVudGF0aW9uIGFuZAorICAgICAgICBJIGhhdmUgcmVtb3ZlZCB0aGUgYmFzaWMgYmxv
YXRlZCB2ZXJzaW9ucy4gTm90ZSBwdXRfdG9fc2NvcGUgc3VmZmVycworICAgICAgICBmcm9tIHRo
ZSBzYW1lIGNvZGUgc2l6ZSBpbmNyZWFzZSBidXQgY3VycmVudGx5IGRvZXMgbm90IGhhdmUgYSBz
aGFyZWQKKyAgICAgICAgc3R1YiBiYXNlZCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyBPSyBmb3Ig
bm93IHRvIHBhc3MgdGhlIHRlc3Qgc3VpdGVzCisgICAgICAgIG9uIEpTVkFMVUUzMl82NCwgYnV0
IHByb2JhYmx5IHNob3VsZCBiZSBhZGRyZXNzZWQgbGF0ZXIuCisKKyAgICAgICAgNC4gUmVtb3Zl
ZCBzb21lIHVudXNlZCBjb2RlIGFuZCBmaWVsZHMgSSBkaXNjb3ZlcmVkIHdoaWxlIHdvcmtpbmcg
b24KKyAgICAgICAgdGhpcywgc3RyaWN0bHkgc3BlYWtpbmcgdGhpcyBpcyBub3QgbmVjZXNzYXJ5
IGZvciB0aGUgZnVuY3Rpb25hbAorICAgICAgICBjaGFuZ2UuCisKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjpzdG9yZVZhbHVlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpp
c051bGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmlzTm90TnVsbCk6CisgICAg
ICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFR1cm5VbmRlZmluZWRJbnRvTnVsbCk6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6bm9PdmVybGFwKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjpub092ZXJsYXBJbXBsKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjpub092ZXJsYXBJbXBsUmVnTWFzayk6CisgICAgICAgICogaml0L0dQUkluZm8uaDoK
KyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcyk6CisgICAgICAgIChKU0M6OkpJVDo6bGluayk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVycyk6CisgICAgICAgICogaml0L0pJVC5o
OgorICAgICAgICAqIGppdC9KSVRBcml0aG1ldGljLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wSW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJl
VW5zaWduZWRBbmRKdW1wSW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlVW5z
aWduZWRJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX21vZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9j
b21wYXJlVW5zaWduZWRBbmRKdW1wKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVV
bnNpZ25lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3cpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcCk6CisgICAgICAgICogaml0L0pJ
VEFyaXRobWV0aWMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF91bnNpZ25l
ZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbmMpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZGVjKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVTZXR1cEZyYW1l
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4pOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dCk6CisgICAgICAgICogaml0L0pJVElubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6SklUOjpnZXRDb25zdGFudE9wZXJhbmQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0
VmlydHVhbFJlZ2lzdGVyVGFnKToKKyAgICAgICAgKEpTQzo6bG9hZEFkZHJPZkNvZGVCbG9ja0Nv
bnN0YW50QnVmZmVyKToKKyAgICAgICAgKEpTQzo6SklUOjpsb2FkQ29kZUJsb2NrQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudFBheWxvYWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudFRhZyk6CisgICAgICAgICogaml0
L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbW92KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2VuZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9u
ZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfamZhbHNlKToKKyAgICAgICAgKEpTQzo6SklUOjp2YWx1ZUlzRmFsc2V5R2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2plcV9udWxsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2puZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXFf
cHRyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2plcSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdHJ1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6dmFs
dWVJc1RydXRoeUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXEpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0RXEpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRj
aF9jaGFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9uZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b190aGlzKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmND
b21tb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5j
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2lzX2VtcHR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2Jvb2xlYW4pOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2lzX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX25vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdW5kZWZp
bmVkX29yX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3Jf
bnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXFfcHRyKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Vx
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lcSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9qZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcEVxSnVtcFNsb3cp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcSk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVPcFN0cmljdEVxSnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfanN0
cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX251bWJlcik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF90b19udW1lcmljKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3N0cmlu
Zyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19vYmplY3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9lbnRlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jaGVja190ZHopOgorICAg
ICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wdXRfZ2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9z
ZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0
ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29w
X3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0
X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVU
aHVuayk6CisgICAgICAgIChKU0M6OkpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3B1dF90b19hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2ludGVybmFsX2ZpZWxkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9pbnRl
cm5hbF9maWVsZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcHJvcGVydHlfZW51
bWVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0V3JpdGVCYXJyaWVyKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaml0L0pTSW50ZXJmYWNlSklULmg6Cisg
ICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OnBvcFRodW5r
U3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpOgorICAgICAgICAqIGpp
dC9UaHVua0dlbmVyYXRvcnMuaDoKKwogMjAyMS0xMS0wOSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0
LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyODUy
NDYuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDMxOTRlMzAyOWQ0Y2Y2NTRiY2Y4
ODhiM2E5MGMzNWQ0YjM0MzkzZDYuLjg0YWE5ZGRlOTJiMGEzODM4NzQ3MjA1NjcwZjBmYjM0MzZi
ZjQxNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00Nzg1LDcgKzQ3ODUsNiBA
QAogCQlBN0JGRjNCRjE3OTg2ODk0MDAwMkY0NjIgLyogREZHRmlsdHJhdGlvblJlc3VsdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGaWx0cmF0aW9uUmVzdWx0Lmg7IHBh
dGggPSBkZmcvREZHRmlsdHJhdGlvblJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBN0MwQzRBQTE2N0MwOENEMDAxNzAxMUQgLyogSlNTY3JpcHRSZWYuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTY3JpcHRSZWYuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBN0MwQzRBQjE2N0MwOENEMDAxNzAxMUQgLyogSlNTY3JpcHRS
ZWZQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU2NyaXB0UmVm
UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBN0MxRThDODExMkU3MDFD
MDBBMzdGOTggLyogSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdDMUVBRUIxNzk4N0FCNjAwMjk5REIyIC8qIENMb29wU3Rh
Y2tJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENMb29wU3RhY2tJ
bmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QzFFQUVDMTc5ODdBQjYw
MDI5OURCMiAvKiBTdGFja1Zpc2l0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBsaW5lRW5kaW5nID0gMDsgcGF0aCA9IFN0YWNrVmlzaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE3QzFFQUVEMTc5ODdBQjYwMDI5OURCMiAvKiBTdGFja1Zpc2l0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhY2tWaXNpdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NDE5LDcgKzY0MTgsNiBAQAogCQkJCTcyNkI5MUFG
MjY1ODE2NTMwMDhFNkY4MiAvKiBKSVRQbGFuLmggKi8sCiAJCQkJNzIxMzFCRjYyNjU4N0VGMjAw
NzExNENGIC8qIEpJVFBsYW5TdGFnZS5oICovLAogCQkJCTg2Q0M4NUMzMEVFN0E4OTQwMDI4ODY4
MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgKi8sCi0JCQkJQTdDMUU4QzgxMTJFNzAxQzAwQTM3
Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwICovLAogCQkJCUZFM0EwNkI4MUMxMTAz
RDkwMDM5MEZERCAvKiBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmNwcCAqLywKIAkJCQlGRTNBMDZC
OTFDMTEwM0Q5MDAzOTBGREQgLyogSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oICovLAogCQkJCTcy
MTMxQkYzMjY1ODdFRjIwMDcxMTRDRiAvKiBKSVRTYWZlcG9pbnQuY3BwICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0CmluZGV4IDc5M2Y0NmY3YmM1OGU1MDhjZGE2Y2I5MDE1YWEwOTJlOGM5
ODYwZDkuLjg2YjYwMjQ5ODEwZmQwYTIyYzIzMmY5YTMxNWNkOGQ1OGFiNTQ1MzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQKQEAgLTY2MCw3ICs2NjAsNiBAQCBqaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAogaml0L0pJVE9wZXJhdGlvbnMuY3BwCiBqaXQvSklUUGxhbi5jcHAKIGppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAKLWppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAogaml0L0pJ
VFJpZ2h0U2hpZnRHZW5lcmF0b3IuY3BwCiBqaXQvSklUU2FmZXBvaW50LmNwcAogaml0L0pJVFNp
emVTdGF0aXN0aWNzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmgKaW5kZXggNjVkZDhlZGVmNzQ3OTk2ZDVmNmQ4ZjE5MjQ2ZTZhZDkzMzZkNDczOC4uMmZk
NDU0NDFjNjdkMGM1YmUwYThlODQ5NjI3NGRmMDYwZWEwODMwMiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC0yNzYsNyArMjc2LDE3IEBAIHB1Ymxp
YzoKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIodmFsdWUucGF5bG9hZCgpKSwgcmVncy5wYXls
b2FkR1BSKCkpOwogI2VuZGlmCiAgICAgfQotICAgIAorCisgICAgdm9pZCBzdG9yZVZhbHVlKEpT
VmFsdWUgdmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICAgICAgc3RvcmU2NChJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRkcmVzcyk7
CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBzdG9yZTMyKEltbTMyKHZhbHVlLnRh
ZygpKSwgYWRkcmVzcy53aXRoT2Zmc2V0KFRhZ09mZnNldCkpOworICAgICAgICBzdG9yZTMyKElt
bTMyKHZhbHVlLnBheWxvYWQoKSksIGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSk7
CisjZW5kaWYKKyAgICB9CisKICAgICB2b2lkIHN0b3JlVHJ1c3RlZFZhbHVlKEpTVmFsdWUgdmFs
dWUsIEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTEwNjMs
NiArMTA3MywyNCBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKKyAgICB2b2lkIGlzTnVsbChK
U1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgZHN0KQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ3MucGF5bG9hZEdQUigpLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VmFsdWVOdWxsKSwgZHN0KTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAg
ICAgIGNvbXBhcmUzMihFcXVhbCwgcmVncy50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
Ok51bGxUYWcpLCBkc3QpOworI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBpc05vdE51bGwoSlNW
YWx1ZVJlZ3MgcmVncywgR1BSUmVnIGRzdCkKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdzLnBheWxvYWRHUFIoKSwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlZhbHVlTnVsbCksIGRzdCk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAg
ICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpOdWxsVGFnKSwgZHN0KTsKKyNlbmRpZgorICAgIH0KKwogICAgIEp1bXAgYnJhbmNoSWZO
dWxsKEdQUlJlZyBncHIpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0xMTMyLDYgKzEx
NjAsMTcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYnJhbmNoVGVzdFB0cihaZXJvLCBzdHJp
bmdJbXBsR1BSLCBUcnVzdGVkSW1tMzIoSlNTdHJpbmc6OmlzUm9wZUluUG9pbnRlcikpOwogICAg
IH0KIAorICAgIHZvaWQgZW1pdFR1cm5VbmRlZmluZWRJbnRvTnVsbChKU1ZhbHVlUmVncyByZWdz
KQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzdGF0aWNfYXNzZXJ0KChKU1Zh
bHVlOjpWYWx1ZVVuZGVmaW5lZCAmIH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpID09IEpTVmFsdWU6
OlZhbHVlTnVsbCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZp
bmVkVGFnKSwgcmVncy5wYXlsb2FkR1BSKCkpOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICAgICAgc3RhdGljX2Fzc2VydCgoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnIHwgMSkgPT0gSlNWYWx1
ZTo6TnVsbFRhZyk7CisgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdzLnRhZ0dQUigp
KTsKKyNlbmRpZgorICAgIH0KKwogICAgIHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3JCeXRlT2Zm
c2V0KHB0cmRpZmZfdCBieXRlT2Zmc2V0KQogICAgIHsKICAgICAgICAgcmV0dXJuIEFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGJ5dGVPZmZzZXQpOwpAQCAtMTg2Myw2ICsxOTAy
LDQ5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBzdG9yZVdhc21Db250ZXh0SW5zdGFuY2VO
ZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCk7CiAjZW5kaWYKIAorICAgIC8vIENoZWNrcyB0aGF0
IHRoZSBnaXZlbiBsaXN0IG9mIEdQUlJlZ3MgYW5kIEpTVmFsdWVSZWdzIGRvIG5vdCBvdmVybGFw
LiBVc2UgdGhpcyBpbiBzdGF0aWMKKyAgICAvLyBhc3NlcnRpb25zIHRvIGVuc3VyZSB0aGF0IHJl
Z2lzdGVyIGFsaWFzZXMgbGl2ZSBhdCB0aGUgc2FtZSBwb2ludCBkbyBub3QgbWFwIHRvIHRoZSBz
YW1lCisgICAgLy8gYXJjaGl0ZWN0dXJhbCByZWdpc3Rlci4KKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUuLi4gQXJncz4KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbm9PdmVybGFwKEFyZ3MuLi4g
YXJncykgeyByZXR1cm4gbm9PdmVybGFwSW1wbCgwLCBhcmdzLi4uKTsgfQorCitwcml2YXRlOgor
ICAgIC8vIEJhc2UgY2FzZQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBub092ZXJsYXBJbXBsKHVpbnQ2NF90KSB7IHJldHVybiB0cnVl
OyB9CisKKyAgICAvLyBHUFJSZWcgY2FzZQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdz
PgorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBub092ZXJsYXBJbXBsKHVpbnQ2NF90IHVzZWQs
IFJlZ2lzdGVySUQgZ3ByLCBBcmdzLi4uIGFyZ3MpCisgICAgeworICAgICAgICB1bnNpZ25lZCBt
YXNrID0gbm9PdmVybGFwSW1wbFJlZ01hc2soZ3ByKTsKKyAgICAgICAgaWYgKHVzZWQgJiBtYXNr
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbm9PdmVybGFwSW1w
bCh1c2VkIHwgbWFzaywgYXJncy4uLik7CisgICAgfQorCisgICAgLy8gSlNWYWx1ZVJlZ3MgY2Fz
ZQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBub092ZXJsYXBJbXBsKHVpbnQ2NF90IHVzZWQsIEpTVmFsdWVSZWdzIGpzciwgQXJncy4u
LiBhcmdzKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbWFzayA9IG5vT3ZlcmxhcEltcGxSZWdN
YXNrKGpzci5wYXlsb2FkR1BSKCkpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIG1h
c2sgfD0gbm9PdmVybGFwSW1wbFJlZ01hc2soanNyLnRhZ0dQUigpKTsKKyNlbmRpZgorICAgICAg
ICBpZiAodXNlZCAmIG1hc2spCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiBub092ZXJsYXBJbXBsKHVzZWQgfCBtYXNrLCBhcmdzLi4uKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG5vT3ZlcmxhcEltcGxSZWdNYXNrKFJlZ2lzdGVySUQg
Z3ByKQorICAgIHsKKyAgICAgICAgaWYgKGdwciA9PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAg
ICAgcmV0dXJuIDBVTEw7CisgICAgICAgIHVuc2lnbmVkIGJpdCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihncHIpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChiaXQgPCBzaXplb2YodWludDY0X3Qp
ICogQ0hBUl9CSVQpOworICAgICAgICByZXR1cm4gMVVMTCA8PCBiaXQ7CisgICAgfQorCiBwcm90
ZWN0ZWQ6CiAgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlckltcGwoR1BSUmVnIGNhbGxlZVNhdmVzQnVmZmVyKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0dQUkluZm8uaAppbmRleCBmZDkwOTVkM2ZiNzc1NWZkNGRjNzA0MTljN2VhY2ZiNGY3NTZjNmU0
Li4yZjhlNTQ0NzNmNzIxM2M5MmQ4ODZhMTk2YWUyYzkxYzFlNDQ2ZGM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0dQUkluZm8uaApAQCAtOTIzLDEzICs5MjMsNDMgQEAgcHVibGljOgogCiAjZW5k
aWYgLy8gQ1BVKFJJU0NWNjQpCiAKKy8vIFRvIG1ha2Ugc29tZSBjb2RlIGdlbmVyaWMgb3ZlciBi
b3RoIEpTVkFMVUU2NCBhbmQgSlNWQUxVRTMyXzY0IHBsYXRmb3Jtcywgd2UgdXNlIHN0YW5kYXJk
IG5hbWVzCisvLyBmb3IgY2VydGFpbiBKU1ZhbHVlUmVncyBpbnN0YW5jZXMuIE9uIEpTVkFMVUU2
NCwgYSBKU1ZhbHVlUmVncyBjb3JyZXNwb25kcyB0byBhIHNpbmdsZSA2NC1iaXQKKy8vIGFyY2hp
dGVjdHVyYWwgR1BSLCB3aGlsZSBvbiBKU1ZBTFVFMzJfNjQsIGEgSlNWYWx1ZVJlZ3MgY29ycmVz
cG9uZHMgdG8gYSBwYWlyIG9mIDMyLWJpdAorLy8gYXJjaGl0ZWN0dXJhbCBHUFJzLiBOZXZlcnRo
ZWxlc3MsIGEgbG90IG9mIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHRhcmdldHMgY2FuIGJl
IGFic3RyYWN0ZWQKKy8vIG92ZXIgdXNpbmcgdGhlIGZvbGxvd2luZyBhbGlhc2VzLiBTZWUgQXNz
ZW1ibHlIZWxwZXI6Om5vT3ZlcmxhcCBmb3IgY2F0Y2hpbmcgY29uZmxpY3RpbmcgcmVnaXN0ZXIK
Ky8vIGFsaWFzaW5nIHN0YXRpY2FsbHkuCitjbGFzcyBKU1JJbmZvIHsKK3B1YmxpYzoKKyAgICAv
LyBUZW1wb3JhcnkgcmVnaXN0ZXJzLgorICAgIC8vIE9uIEpTVkFMVUU2NCwganNSZWdUezIqbisx
fXsyKm59IGFsd2F5cyBtYXBzIG9uZS10by1vbmUgdG8gR1BSIHJlZ1R7MipufQorICAgIC8vIE9u
IEpTVkFMVUUzMl82NCwganNSZWdUezIqbisxfXsyKm59IGFsd2F5cyBtYXBzIHRvIHRoZSBHUFIg
cGFpciByZWdUezIqbisxfSAvIHJlZ1R7MipufQorICAgIC8vIFRoaXMgbWFwcGluZyBpcyBkZWxp
YmVyYXRlbHkgc2ltcGxlIHRvIGVhc2UgcmVhc29uaW5nIGFib3V0IGFsaWFzaW5nLiBFLmcuOgor
ICAgIC8vIFNlZWluZyAnanNSZWdUMTAnIGluZGljYXRlcyB0aGF0IGluIGdlbmVyYWwgYm90aCAn
cmVnVDEnIGFuZCAncmVnVDAnIG1heSBiZSB1c2VkLgorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
c3RhdGljIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBqc1JlZ1QxMCB7IEdQUkluZm86OnJlZ1QwIH07
CisgICAgc3RhdGljIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBqc1JlZ1QzMiB7IEdQUkluZm86OnJl
Z1QyIH07CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSlNW
YWx1ZVJlZ3MganNSZWdUMTAgeyBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDAgfTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEpTVmFsdWVSZWdzIGpzUmVnVDMyIHsgR1BSSW5mbzo6cmVnVDMs
IEdQUkluZm86OnJlZ1QyIH07CisjZW5kaWYKKworICAgIC8vIFJldHVybiB2YWx1ZSByZWdpc3Rl
cgorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgc3RhdGljIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBy
ZXR1cm5WYWx1ZUpTUiB7IEdQUkluZm86OnJldHVyblZhbHVlR1BSIH07CisjZWxpZiBVU0UoSlNW
QUxVRTMyXzY0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmV0dXJuVmFsdWVK
U1IgeyBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSIH07
CisjZW5kaWYKK307CisKIC8vIFRoZSBiYXNlbGluZSBKSVQgdXNlcyAiYWNjdW11bGF0b3IiIHN0
eWxlIGV4ZWN1dGlvbiB3aXRoIHJlZ1QwIChmb3IgNjQtYml0KQogLy8gYW5kIHJlZ1QwICsgcmVn
VDEgKGZvciAzMi1iaXQpIHNlcnZpbmcgYXMgdGhlIGFjY3VtdWxhdG9yIHJlZ2lzdGVyKHMpIGZv
cgogLy8gcGFzc2luZyByZXN1bHRzIG9mIG9uZSBvcGNvZGUgdG8gdGhlIG5leHQuIEhlbmNlOgot
Q09NUElMRV9BU1NFUlQoR1BSSW5mbzo6cmVnVDAgPT0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
IHJlZ1QwX211c3RfZXF1YWxfcmV0dXJuVmFsdWVHUFIpOworc3RhdGljX2Fzc2VydChHUFJJbmZv
OjpyZWdUMCA9PSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAjaWYgVVNFKEpTVkFMVUUzMl82
NCkKLUNPTVBJTEVfQVNTRVJUKEdQUkluZm86OnJlZ1QxID09IEdQUkluZm86OnJldHVyblZhbHVl
R1BSMiwgcmVnVDFfbXVzdF9lcXVhbF9yZXR1cm5WYWx1ZUdQUjIpOworc3RhdGljX2Fzc2VydChH
UFJJbmZvOjpyZWdUMSA9PSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwogI2VuZGlmCitzdGF0
aWNfYXNzZXJ0KEpTUkluZm86OmpzUmVnVDEwID09IEpTUkluZm86OnJldHVyblZhbHVlSlNSKTsK
IAogaW5saW5lIEdQUlJlZyBleHRyYWN0UmVzdWx0KEdQUlJlZyByZXN1bHQpIHsgcmV0dXJuIHJl
c3VsdDsgfQogI2lmIFVTRShKU1ZBTFVFNjQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5k
ZXggOTI5NDI0NjA3MzQwMDkxMWI2YzM1N2M3OGE0YTBjNmE3NGU5YWFkNC4uOWMwMDgwMGFlYjRl
NGQxMmMyZjI2ZGE0MDgyYmJhNGI5MjRjNWQ1YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cApAQCAtNjQ0LDkgKzY0NCw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9kZWxfYnlfdmFsKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3BfZGVsX2J5X2lkKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Ao
b3Bfc3ViKQotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAgREVGSU5FX1NM
T1dDQVNFX09QKG9wX2dldF9mcm9tX3Njb3BlKQotI2VuZGlmCiAgICAgICAgIERFRklORV9TTE9X
Q0FTRV9PUChvcF9wdXRfdG9fc2NvcGUpCiAKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X2l0ZXJhdG9yX29wZW4pCkBAIC04MTUsMTMgKzgxMiw4IEBAIHZvaWQgSklUOjpjb21waWxlQW5k
TGlua1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAg
ICAgICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpICYmICFh
cmd1bWVudCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
aW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKGFyZ3Vt
ZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgICAgICAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyB7
IHJlZ1QwIH07Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICAgICAgICAgIGNvbnN0
ZXhwciBKU1ZhbHVlUmVncyByZXN1bHRSZWdzIHsgcmVnVDEsIHJlZ1QwIH07Ci0jZW5kaWYKLSAg
ICAgICAgICAgICAgICBsb2FkVmFsdWUoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0
KSwgcmVzdWx0UmVncyk7Ci0gICAgICAgICAgICAgICAgc3RvcmVWYWx1ZShyZXN1bHRSZWdzLCBB
ZGRyZXNzKHJlZ1QyLCBhcmd1bWVudCAqIHNpemVvZihWYWx1ZVByb2ZpbGUpICsgVmFsdWVQcm9m
aWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKKyAgICAgICAgICAgICAgICBsb2FkVmFsdWUo
QWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSwganNSZWdUMTApOworICAgICAgICAg
ICAgICAgIHN0b3JlVmFsdWUoanNSZWdUMTAsIEFkZHJlc3MocmVnVDIsIGFyZ3VtZW50ICogc2l6
ZW9mKFZhbHVlUHJvZmlsZSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTAyMSw3ICsxMDEzLDcgQEAg
dm9pZCBKSVQ6OmxpbmsoKQogICAgIG1faml0Q29kZS0+bV9jb25zdGFudFBvb2wgPSBXVEZNb3Zl
KG1fY29uc3RhbnRQb29sKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIG1faml0Q29kZS0+bV9p
c1NoYXJlYWJsZSA9IG1faXNTaGFyZWFibGU7Ci0jZWxzZQorI2VsaWYgVVNFKEpTVkFMVUUzMl82
NCkKICAgICBtX2ppdENvZGUtPm1faXNTaGFyZWFibGUgPSBmYWxzZTsKICNlbmRpZgogCkBAIC0x
MDgwLDcgKzEwNzIsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25IYW5kbGVy
cygpCiAgICAgfQogCiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKSB7Ci0gICAg
ICAgIG1fZXhjZXB0aW9uSGFuZGxlciA9IGxhYmVsKCk7CiAgICAgICAgIG1fZXhjZXB0aW9uQ2hl
Y2tzLmxpbmsodGhpcyk7CiAKICAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CmluZGV4IGRlMmM1Y2U3NzBiYmQ1OTNiN2FlNWZkMWE2NTI2NzM4OTQzZGQ5YTEuLjFjNjQ5NjNm
MGU5NDEzMjk4Mzk1NTZjNmIyZWZmZjcyZmQ1YWNhZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aApAQCAtMjU0LDcgKzI1NCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBsb2Fk
Q29uc3RhbnQodW5zaWduZWQgY29uc3RhbnRJbmRleCwgR1BSUmVnKTsKICAgICBwcml2YXRlOgog
ICAgICAgICB2b2lkIGxvYWRHbG9iYWxPYmplY3QoR1BSUmVnKTsKLSAgICAgICAgdm9pZCBsb2Fk
Q29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcpOworICAgICAgICB2b2lk
IGxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIsIEpTVmFsdWVSZWdzKTsKKyNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICB2b2lkIGxvYWRDb2RlQmxvY2tDb25zdGFudFBh
eWxvYWQoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKTsKKyAgICAgICAgdm9pZCBsb2FkQ29k
ZUJsb2NrQ29uc3RhbnRUYWcoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKTsKKyNlbmRpZgog
CiAgICAgICAgIHZvaWQgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblByb2xvZ3VlKEdQUlJlZyBy
ZXN1bHQgPSByZWdUMCk7CiAKQEAgLTM0OCw5ICszNTIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIFByaXZhdGVGaWVsZFB1dEtpbmQg
cHJpdmF0ZUZpZWxkUHV0S2luZChPcCk7CiAKLSAgICAgICAgZW51bSBGaW5hbE9iamVjdE1vZGUg
eyBNYXlCZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07Ci0KICAgICAgICAgdm9pZCBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRzdCk7CisgICAg
ICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoVmlydHVhbFJlZ2lzdGVyIHNy
YywgUmVnaXN0ZXJJRCBkc3QpOwogICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3Mgc3JjKTsKICAgICAgICAgdm9pZCBlbWl0
U3RvcmUoVmlydHVhbFJlZ2lzdGVyLCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdpc3RlcklE
IGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7CiAKQEAgLTM2MSwzMyArMzY0LDI1IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBib29sIGdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVn
aXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBWaXJ0dWFsUmVnaXN0ZXImIG9wLCBpbnQz
Ml90JiBjb25zdGFudCk7CiAKICAgICAgICAgdm9pZCBlbWl0TG9hZERvdWJsZShWaXJ0dWFsUmVn
aXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWRUYWcoVmly
dHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZyk7Ci0gICAgICAgIHZvaWQgZW1pdExvYWRQYXls
b2FkKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKIAotICAgICAgICB2b2lk
IGVtaXRMb2FkKGNvbnN0IEpTVmFsdWUmIHYsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBh
eWxvYWQpOwotICAgICAgICB2b2lkIGVtaXRMb2FkKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJ
RCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVn
aXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRMb2FkMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVy
SUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwgVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklE
IHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpOworICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQg
cGF5bG9hZCk7CisgICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyhWaXJ0dWFs
UmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCk7CiAKICAgICAgICAgdm9pZCBlbWl0U3RvcmUo
VmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdp
c3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgIHZvaWQgZW1pdFN0b3Jl
SW50MzIoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0lu
dDMyID0gZmFsc2UpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZUludDMyKFZpcnR1YWxSZWdpc3Rl
ciwgVHJ1c3RlZEltbTMyIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyID0gZmFsc2UpOwogICAg
ICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBheWxv
YWQsIGJvb2wgaW5kZXhJc0NlbGwgPSBmYWxzZSk7CiAgICAgICAgIHZvaWQgZW1pdFN0b3JlQm9v
bChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQm9vbCA9
IGZhbHNlKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVEb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBG
UFJlZ2lzdGVySUQgdmFsdWUpOwogCiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcpOwogICAgICAgICB2b2lk
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEKTsKIAotICAgICAgICB2b2lk
IGNvbXBpbGVHZXRCeUlkSG90UGF0aChjb25zdCBJZGVudGlmaWVyKik7Ci0KICAgICAgICAgLy8g
QXJpdGhtZXRpYyBvcGNvZGUgaGVscGVycwogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+
CiAgICAgICAgIHZvaWQgZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RydWN0aW9uICosIE9w
ZXJhbmRUeXBlcywgSnVtcExpc3QmIG5vdEludDMyT3AxLCBKdW1wTGlzdCYgbm90SW50MzJPcDIs
IGJvb2wgb3AxSXNJblJlZ2lzdGVycyA9IHRydWUsIGJvb2wgb3AySXNJblJlZ2lzdGVycyA9IHRy
dWUpOwogCiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICB2b2lkIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpOwotICAg
ICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBS
ZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOwog
ICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwg
UmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOwogICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoVmly
dHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIC8qIG9ubHkgdXNlZCBp
biBKU1ZhbHVlMzJfNjQgKi8gPSBmYWxzZSkKICAgICAgICAgewpAQCAtNDAzLDkgKzM5OCw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChS
ZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3ROdW1iZXIoUmVn
aXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KFJlZ2lzdGVy
SUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQgc2NyYXRjaCk7Ci0KLSAgICAgICAgdm9pZCBjb21w
aWxlR2V0QnlJZEhvdFBhdGgoVmlydHVhbFJlZ2lzdGVyIGJhc2VSZWcsIGNvbnN0IElkZW50aWZp
ZXIqKTsKLQogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdm9pZCBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoSlNWYWx1ZVJlZ3MpOwpAQCAtNjQ3LDkgKzYzOSw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF90b19hcmd1bWVu
dHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0g
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0jZW5kaWYKICAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAKICAgICAgICAgdm9pZCBlbWl0U2xvd0Nhc2VDYWxs
KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIFNs
b3dQYXRoRnVuY3Rpb24pOwpAQCAtNjcxLDIxICs2NjAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcywgR1BSUmVnKTsKICAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9ubHlDaGVjayhSZXNvbHZl
VHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpOwotICAgICAgICB2b2lkIGVtaXRSZXNvbHZlQ2xvc3Vy
ZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKLSAgICAgICAgdm9pZCBlbWl0TG9h
ZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0
cnVjdHVyZVNsb3QpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQgZW1pdEdldFZh
ckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyk7Ci0gICAgICAgIHZvaWQgZW1p
dEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyk7Ci0j
ZWxzZQotICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUq
KiBvcGVyYW5kLCBHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9hZCk7Ci0gICAgICAgIHZvaWQgZW1p
dEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyB0YWcsIEdQUlJlZyBw
YXlsb2FkKTsKLSNlbmRpZgotICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxS
ZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXROb3Rp
ZnlXcml0ZShXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlV2F0
Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFs
VmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBv
aW50U2V0Kik7Ci0gICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNW
YWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCoqKTsKLSAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9p
bnRTZXQqKTsKIAogICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
KTsKIApAQCAtNzMzLDE0ICs3MDksMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmFsdWVJc0ZhbHNleUdl
bmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiB2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJik7Ci0KKyNlbmRpZiAvLyBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYpOwog
ICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBzbG93
X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mKTsKICAgICAgICAgdGVtcGxhdGUgPFJlc29s
dmVUeXBlPgogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mKTsKICAgICAgICAgdGVtcGxhdGUg
PFJlc29sdmVUeXBlPgogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mKTsKLSNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgICAgICBKdW1wIGdldFNsb3dDYXNlKFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiAgICAgICAgIHsKQEAgLTk4Nyw5ICs5
NjIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNo
ZWNrczsKICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9s
bGJhY2s7Ci0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgICAgICBMYWJlbCBtX2V4
Y2VwdGlvbkhhbmRsZXI7Ci0jZW5kaWYKIAogICAgICAgICB1bnNpZ25lZCBtX2dldEJ5SWRJbmRl
eCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1fZ2V0QnlWYWxJbmRleCB7IFVJTlRf
TUFYIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0
aWMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAppbmRl
eCA4ZjFhN2M1YjgzNDYxMGFhMGI4YWZjODMxN2I5MWNkZTAxNzRlNmIzLi44ZjRkODBiOTljZmM5
ZTkxZmUyMzNkNGJlOTI2ZjU2MzdmNjZlYzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQXJpdGhtZXRpYy5jcHAKQEAgLTIxMCw3ICsyMTAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9w
MiwgdW5zaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwog
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW50KHJlZ1QxKTsKIApAQCAtMjM4LDcgKzIzOSw4IEBAIHZvaWQgSklUOjplbWl0X2Nv
bXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdp
c3RlciBvCiAgICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9w
MSk7CiAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMSwg
SW1tMzIob3AxaW1tKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7CisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AyLCByZWdUMSk7CiAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdU
MCwgcmVnVDEpLCB0YXJnZXQpOwogICAgIH0KIH0KQEAgLTI2NCw3ICsyNjYsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxS
ZWdpc3RlciBvcDEsIFZpcgogICAgICAgICBpbnQzMl90IG9wMWltbSA9IGdldE9wZXJhbmRDb25z
dGFudEludChvcDEpOwogICAgICAgICBjb21wYXJlMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdU
MCwgSW1tMzIob3AxaW1tKSwgcmVnVDApOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEpOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgcmVnVDEpOwogICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9uLCByZWdUMCwgcmVn
VDEsIHJlZ1QwKTsKICAgICB9CiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKQEAgLTQyMiw3ICs0MjUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBBU1NFUlQocmVnVDQgIT0gZWR4
KTsKICAgICBBU1NFUlQocmVnVDQgIT0gZWN4KTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKG9wMSwgcmVnVDQsIG9wMiwgZWN4KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgcmVnVDQpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBlY3gpOwogICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUNCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW50KGVjeCk7CiAKQEAgLTQ4MCw3ICs0ODQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpbwog
CiAgICAgLy8gQ2hhcmFjdGVyIGxlc3MuCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihv
cDEpKSB7Ci0gICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMSkpOwogICAgICAgICBKdW1wTGlzdCBmYWlsdXJlczsK
ICAgICAgICAgZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcocmVnVDAsIHJlZ1QwLCBmYWlsdXJlcyk7
CkBAIC00ODksNyArNDkzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW8KICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKLSAgICAg
ICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RDZWxsKHJlZ1QxKSk7CiAgICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOwogICAgICAgICBlbWl0
TG9hZENoYXJhY3RlclN0cmluZyhyZWdUMCwgcmVnVDAsIGZhaWx1cmVzKTsKQEAgLTQ5OCwxNSAr
NTAyLDE2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvCiAgICAgICAgIHJldHVybjsKICAgICB9
IAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGVtaXRMb2Fk
KG9wMiwgcmVnVDMsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIs
IHJlZ1QzLCByZWdUMik7CiAgICAgICAgIG5vdEludDMyT3AyLmFwcGVuZChicmFuY2hJZk5vdElu
dDMyKHJlZ1QzKSk7CiAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24p
LCByZWdUMiwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigpKSksIHRhcmdl
dCk7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAg
IGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgICAgIG5vdEludDMyT3AxLmFwcGVuZChicmFu
Y2hJZk5vdEludDMyKHJlZ1QxKSk7CiAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9u
LCByZWdUMCwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikuYXNJbnQzMigpKSksIHRhcmdl
dCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdExvYWQyKG9wMSwgcmVnVDEsIHJlZ1QwLCBv
cDIsIHJlZ1QzLCByZWdUMik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBy
ZWdUMSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDMs
IHJlZ1QyKTsKICAgICAgICAgbm90SW50MzJPcDEuYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmVn
VDEpKTsKICAgICAgICAgbm90SW50MzJPcDIuYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmVnVDMp
KTsKICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCByZWdUMiksIHRh
cmdldCk7CkBAIC01MzMsMTMgKzUzOCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWdu
ZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbAogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAg
ICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21t
dXRlKGNvbmRpdGlvbiksIHJlZ1QyLCBJbW0zMihnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0lu
dDMyKCkpKSwgdGFyZ2V0KTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9w
MikpIHsKLSAgICAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICAgICAgYWRkSnVtcChi
cmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihnZXRDb25zdGFudE9wZXJhbmQob3AyKS5h
c0ludDMyKCkpKSwgdGFyZ2V0KTsKICAgICB9IGVsc2UgewotICAgICAgICBlbWl0TG9hZDIob3Ax
LCByZWdUMSwgcmVnVDAsIG9wMiwgcmVnVDMsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AyLCByZWdUMywgcmVnVDIpOwogICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRp
dGlvbiwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsKICAgICB9CiB9CkBAIC01NTMsMTMgKzU1OSwx
NCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aQogICAgIFZpcnR1YWxSZWdpc3RlciBvcDIgPSBi
eXRlY29kZS5tX3JoczsKIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0g
ICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAgICAgIGNvbXBhcmUzMihjb21tdXRl
KGNvbmRpdGlvbiksIHJlZ1QyLCBJbW0zMihnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMy
KCkpLCByZWdUMCk7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7
Ci0gICAgICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgICAgIGNvbXBhcmUzMihjb25k
aXRpb24sIHJlZ1QwLCBJbW0zMihnZXRDb25zdGFudE9wZXJhbmQob3AyKS5hc0ludDMyKCkpLCBy
ZWdUMCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdExvYWQyKG9wMSwgcmVnVDEsIHJlZ1Qw
LCBvcDIsIHJlZ1QzLCByZWdUMik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCByZWdUMSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVn
VDMsIHJlZ1QyKTsKICAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QyLCBy
ZWdUMCk7CiAgICAgfQogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7CkBAIC01NzUsOCAr
NTgyLDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0
aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW8KIAogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKLSAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdExvYWQo
b3AyLCByZWdUMywgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdU
MSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMywgcmVnVDIp
OwogICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFpl
cm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CkBAIC02MDQsNyArNjExLDcg
QEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcChjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1
Y3Rpb24sIE9wZXJhbmRUeXBlcyB0eXBlcywKICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKEFib3ZlLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKIAog
ICAgICAgICBpZiAoIW9wMklzSW5SZWdpc3RlcnMpCi0gICAgICAgICAgICBlbWl0TG9hZChvcDIs
IHJlZ1QzLCByZWdUMik7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwg
cmVnVDMsIHJlZ1QyKTsKIAogICAgICAgICBKdW1wIGRvdWJsZU9wMiA9IGJyYW5jaDMyKEJlbG93
LCByZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpOwogCkBAIC02NjgsNyAr
Njc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcChjb25zdCBJbnN0cnVjdGlvbiAq
aW5zdHJ1Y3Rpb24sIE9wZXJhbmRUeXBlcyB0eXBlcywKICAgICAgICAgQVNTRVJUKG9wMklzSW5S
ZWdpc3RlcnMpOwogCiAgICAgICAgIGlmICghb3AxSXNJblJlZ2lzdGVycykKLSAgICAgICAgICAg
IGVtaXRMb2FkUGF5bG9hZChvcDEsIHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJQYXlsb2FkKG9wMSwgcmVnVDApOwogCiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91
YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRBcml0aG1ldGljMzJfNjQuY3BwCmluZGV4IDIyNWUxNGExYmUwOGFiZDU1MGFkNjNjNDVlYjUx
YTFjNDYyZTFjMjAuLjJkZGJjYjMwNjhiZWQ5Yjc1ODc0NTgxM2RjNTU0M2VlZTk4ZDVhM2MgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAK
QEAgLTQ3LDcgKzQ3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0g
Ynl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKICAgICAKLSAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgCiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RJbnQzMihyZWdUMSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExl
c3NUaGFuLCByZWdUMCwgVHJ1c3RlZEltbTMyKDApKSk7CkBAIC01OSw3ICs1OSw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2luYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwogICAg
IFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKIAotICAgIGVtaXRM
b2FkKHNyY0RzdCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
Y0RzdCwgcmVnVDEsIHJlZ1QwKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIo
cmVnVDEpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZElt
bTMyKDEpLCByZWdUMCkpOwpAQCAtNzEsNyArNzEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0TG9hZChzcmNEc3QsIHJlZ1Qx
LCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QxLCByZWdU
MCk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKHJlZ1QxKSk7CiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCmluZGV4IDA5MTk5MTU4NDY4YzBmZTEw
MmI1ZGZiZmEyYmU0ZmUxNzMxOTdlMmIuLmMzODYxMTk3NzdhZjEwMTkwNDM0OGQ0ZTA1ZTNiYTYw
MzczMTIyMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcApAQCAtNDMsMTgg
KzQzLDEyIEBACiBuYW1lc3BhY2UgSlNDIHsKIAogbmFtZXNwYWNlIHsKLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXR1cm5WYWx1ZUpTUiB7IEdQUkluZm86
OnJldHVyblZhbHVlR1BSIH07Ci0gICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGNhbGxlZUpTUiB7
IEdQUkluZm86OnJlZ1QwIH07Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGNvbnN0ZXhw
ciBKU1ZhbHVlUmVncyByZXR1cm5WYWx1ZUpTUiB7IEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIgfTsKLSAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgY2Fs
bGVlSlNSIHsgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwIH07Ci0jZW5kaWYKKyAgICBj
b25zdGV4cHIgSlNWYWx1ZVJlZ3MgY2FsbGVlSlNSID0gSlNSSW5mbzo6anNSZWdUMTA7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIHN0YXRpY19hc3NlcnQoIXJldHVyblZhbHVlSlNSLnVzZXMoY2FsbEZyYW1l
UmVnaXN0ZXIpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChyZXR1cm5WYWx1ZUpTUiwg
Y2FsbEZyYW1lUmVnaXN0ZXIpKTsKIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluIHJldHVy
blZhbHVlR1BSIChyZXR1cm5WYWx1ZUdQUjIvcmV0dXJuVmFsdWVHUFIgb24gMzItYml0KS4KICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJldD4oKTsKQEAgLTE0
MSwyMCArMTM1LDE0IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2Rl
LCBKSVRDb25zdGFudFBvb2w6OkNvbnN0YW50IGNhbGxMaW5rSW5mCiAjZW5kaWYKIAogICAgIHsK
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYXJndW1l
bnRzSlNSIHsgcmVnVDIgfTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGNvbnN0
ZXhwciBKU1ZhbHVlUmVncyBhcmd1bWVudHNKU1IgeyByZWdUMywgcmVnVDIgfTsKLSNlbmRpZgot
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBhcmd1bWVudHNKU1Ip
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywganNSZWdUMzIpOwog
ICAgICAgICBGX0pJVE9wZXJhdGlvbl9HRkpaWiBzZXR1cE9wZXJhdGlvbjsKICAgICAgICAgaWYg
KE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAg
ICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1l
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNl
dHVwVmFyYXJnc0ZyYW1lOwogICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgcmVnVDQsIHJlZ1QxLCBhcmd1bWVudHNK
U1IsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24oc2V0
dXBPcGVyYXRpb24sIHJlZ1Q0LCByZWdUMSwganNSZWdUMzIsIGZpcnN0VmFyQXJnT2Zmc2V0LCBy
ZWdUMCk7CiAgICAgICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlZ1Q1KTsKICAgICB9CiAKQEAg
LTE2Nyw3ICsxNTUsNyBAQCBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29k
ZSwgSklUQ29uc3RhbnRQb29sOjpDb25zdGFudCBjYWxsTGlua0luZgogICAgIG5vdEJpZ2dlc3Qu
bGluayh0aGlzKTsKICAgICAKICAgICAvLyBJbml0aWFsaXplICd0aGlzJy4KLSAgICBjb25zdGV4
cHIgSlNWYWx1ZVJlZ3MgdGhpc0pTUiA9IGNhbGxlZUpTUjsgLy8gVXNlZCBhcyB0ZW1wb3Jhcnkg
cmVnaXN0ZXIKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgdGhpc0pTUiA9IGpzUmVnVDEwOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZhbHVlLCB0aGlzSlNSKTsKICAgICBzdG9y
ZVZhbHVlKHRoaXNKU1IsIEFkZHJlc3MocmVnVDUsIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zm
c2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CiAKQEAgLTMxMiw3
ICszMDAsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZAogCiAjaWYgVVNFKEpTVkFMVUUzMl82
NCkKICAgICAvLyBXZSBuZWVkIHRoaXMgb24gSlNWQUxVRTMyXzY0IG9ubHkgYXMgb24gSlNWQUxV
RTY0IGEgcG9pbnRlciBjb21wYXJpc29uIGluIHRoZSBEYXRhSUMgZmFzdAotICAgIC8vIHBhdGNo
IGNhdGNoZXMgdGhpcy4KKyAgICAvLyBwYXRoIGNhdGNoZXMgdGhpcy4KICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdENlbGwoY2FsbGVlSlNSKSk7CiAjZW5kaWYKIApAQCAtNDc3LDcgKzQ2NSw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uKQogICAgIHVzaW5nIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6cmVzdWx0SlNS
OwogICAgIHVzaW5nIEJhc2VsaW5lR2V0QnlJZFJlZ2lzdGVyczo6c3R1YkluZm9HUFI7CiAKLSAg
ICBzdGF0aWNfYXNzZXJ0KCFyZXR1cm5WYWx1ZUpTUi51c2VzKHN0dWJJbmZvR1BSKSk7CisgICAg
c3RhdGljX2Fzc2VydChub092ZXJsYXAocmV0dXJuVmFsdWVKU1IsIHN0dWJJbmZvR1BSKSk7CiAg
ICAgc3RhdGljX2Fzc2VydChyZXR1cm5WYWx1ZUpTUiA9PSBiYXNlSlNSKTsgLy8gT3RoZXJ3aXNl
IHdpbGwgbmVlZCBtb3ZlKHJldHVyblZhbHVlSlNSLCBiYXNlSlNSKQogICAgIHN0YXRpY19hc3Nl
cnQoYmFzZUpTUiA9PSByZXN1bHRKU1IpOwogCkBAIC01ODIsNyArNTcwLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiAg
ICAgYWR2YW5jZVRvTmV4dENoZWNrcG9pbnQoKTsKIAogICAgIC8vIGNhbGwgcmVzdWx0ICh7IGRv
bmUsIHZhbHVlIH0gSlNPYmplY3QpIGluIHJlZ1QwICAocmVnVDEvcmVnVDAgb3IgMzItYml0KQot
ICAgIHN0YXRpY19hc3NlcnQoIXJldHVyblZhbHVlSlNSLnVzZXMoc3R1YkluZm9HUFIpKTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChyZXN1bHRKU1IsIHN0dWJJbmZvR1BSKSk7CiAKICAg
ICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgaXRlckNhbGxSZXN1bHRKU1IgPSBkb250Q2xvYmJlckpT
UjsKICAgICBtb3ZlVmFsdWVSZWdzKHJldHVyblZhbHVlSlNSLCBpdGVyQ2FsbFJlc3VsdEpTUik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCmluZGV4IGQ2MDJmYzkyNmM5MzI5
ZTIxMmE0ZDUwN2ZkODZkMDc4YWJhN2JhMWEuLmRiODE5MDdmOWIwNDQwZjY3YmZjZDg2MmRjOGE0
ZTI4Y2Y5Yjg1NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCkBAIC02
NSwxMiArNjUsOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc0tub3duQ2VsbChWaXJ0dWFs
UmVnaXN0ZXIgc3JjKQogQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0Q29uc3RhbnRPcGVy
YW5kKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB7CiAgICAgQVNTRVJUKHNyYy5pc0NvbnN0YW50KCkp
OwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgcmV0dXJuIG1fcHJvZmlsZWRDb2RlQmxvY2st
PmdldENvbnN0YW50KHNyYyk7Ci0jZWxzZQogICAgIFJFTEVBU0VfQVNTRVJUKG1fdW5saW5rZWRD
b2RlQmxvY2stPmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9uKHNyYykgIT0gU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KTsKICAgICByZXR1cm4gbV91bmxp
bmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSNlbmRpZgogfQogCiBBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9t
LCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCkBAIC0xNjcsMzUgKzE2MywyMiBAQCBBTFdBWVNfSU5M
SU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xs
YmFja09uRXhjZXB0aQogQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0KGNvbnN0IEZ1bmN0aW9u
UHRyPENGdW5jdGlvblB0clRhZz4gZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2soZnVuY3Rpb24pOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKLSNlbHNlCi0gICAgZW1pdFN0b3JlKGRzdCwgcmV0
dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7Ci0jZW5kaWYKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVKU1IpOwogICAgIHJldHVybiBjYWxsOwogfQogCiBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNW
YWx1ZVJlc3VsdChBZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAg
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKLSNl
bHNlCi0gICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7
Ci0jZW5kaWYKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVKU1Ip
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCeXRlY29kZT4KIEFMV0FZU19JTkxJTkUgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1
ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBieXRlY29kZSwgY29uc3QgRnVuY3Rp
b25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhmdW5jdGlvbik7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJldHVyblZhbHVlR1BSKTsKLSNlbHNlCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQ
UikpOwotICAgIGVtaXRTdG9yZShkc3QsIHJldHVyblZhbHVlR1BSMiwgcmV0dXJuVmFsdWVHUFIp
OwotI2VuZGlmCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFs
dWVKU1IpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUpTUik7
CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKQEAgLTIwMywxMyArMTg2LDggQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgQnl0ZWNvZGU+CiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjphcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdFdpdGhQcm9maWxlKGNvbnN0IEJ5dGVjb2RlJiBi
eXRlY29kZSwgQWRkcmVzcyBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwotI2Vsc2UK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5W
YWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFs
dWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7Ci0jZW5kaWYKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUpTUik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJldHVyblZhbHVlSlNSKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlu
a1Nsb3dDYXNlSWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
ciwgVmlydHVhbFJlZ2lzdGVyIHJlZykKQEAgLTMzMiwxMiArMzEwLDcgQEAgQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRDaGFyKFZpcnR1YWxSZWdpc3RlciBzcmMpCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIGlubGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2Ft
ZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVl
LCB2b2lkPiBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5
dGVjb2RlKQogewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0IHsg
cmVnVDAgfTsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0IHsgcmVnVDEsIHJlZ1QwIH07
Ci0jZW5kaWYKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHQpOwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIGpzUmVnVDEwKTsKIH0KIAogaW5s
aW5lIHZvaWQgSklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSguLi4p
IHsgfQpAQCAtMzQ5LDEyICszMjIsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyB2YQogICAgICAg
ICByZXR1cm47CiAKICAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+
bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpICsgdmFsdWVQcm9maWxl
T2Zmc2V0Rm9yPEJ5dGVjb2RlPihtX2J5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKSArIFZhbHVl
UHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
c3RvcmU2NCh2YWx1ZS5ncHIoKSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBvZmZzZXQpKTsKLSNl
bHNlCi0gICAgc3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksIEFkZHJlc3Moc19tZXRhZGF0YUdQ
Uiwgb2Zmc2V0ICsgUGF5bG9hZE9mZnNldCkpOwotICAgIHN0b3JlMzIodmFsdWUudGFnR1BSKCks
IEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgb2Zmc2V0ICsgVGFnT2Zmc2V0KSk7Ci0jZW5kaWYKKyAg
ICBzdG9yZVZhbHVlKHZhbHVlLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG9mZnNldCkpOwogfQog
CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTM5NSw3OSArMzYzLDg1IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCkKICAgICBzdG9y
ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBhZGRyZXNzRm9yKGRzdCkpOwogfQogCitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rl
ciBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKK3sKKyAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsg
Ly8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRo
IGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KKyAgICBpZiAoc3Jj
LmlzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAobV9wcm9maWxlZENvZGVCbG9jay0+aXNDb25z
dGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhzcmMpKQorICAgICAgICAgICAgbW92ZVZhbHVl
KG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyksIGRzdCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIGRzdCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3Ioc3JjKSwgZHN0KTsKK30K
KworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIgZHN0LCBKU1ZhbHVlUmVncyBmcm9tKQoreworICAgIHN0b3JlVmFsdWUoZnJvbSwg
YWRkcmVzc0Zvcihkc3QpKTsKK30KKworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCitBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMs
IFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQpCit7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMsIEpTVmFsdWVSZWdzIHsgdGFnLCBwYXlsb2FkIH0pOworfQorCitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChWaXJ0dWFs
UmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKK3sKKyAgICBBU1NFUlQobV9ieXRlY29kZUlu
ZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBob3QvY29s
ZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29kZUluZGV4IGlzIHNldC4KKyAgICBp
ZiAoc3JjLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAobV9wcm9maWxlZENvZGVCbG9jay0+
aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhzcmMpKQorICAgICAgICAgICAgbW92
ZShJbW0zMihtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpLnBheWxvYWQoKSks
IGRzdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudFBh
eWxvYWQoc3JjLCBkc3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGxvYWQzMihwYXls
b2FkRm9yKHNyYyksIGRzdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJUYWcoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpCit7
CisgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5
IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0IG1fYnl0
ZWNvZGVJbmRleCBpcyBzZXQuCisgICAgaWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAg
aWYgKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxv
Y2soc3JjKSkKKyAgICAgICAgICAgIG1vdmUoSW1tMzIobV91bmxpbmtlZENvZGVCbG9jay0+Z2V0
Q29uc3RhbnQoc3JjKS50YWcoKSksIGRzdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxv
YWRDb2RlQmxvY2tDb25zdGFudFRhZyhzcmMsIGRzdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgbG9hZDMyKHRhZ0ZvcihzcmMpLCBkc3QpOworfQorI2VsaWYgVVNFKEpTVkFMVUU2NCkK
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpCit7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIEpTVmFsdWVSZWdzIHsgZHN0IH0pOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdp
c3RlcklEIGRzdCkKK3sKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgSlNWYWx1ZVJl
Z3MgeyBkc3QgfSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQoreworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBKU1ZhbHVlUmVncyB7IGZyb20gfSk7Cit9CisjZW5k
aWYKKworCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIAogaW5saW5lIHZvaWQgSklUOjplbWl0TG9h
ZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7CiAgICAg
aWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgQVNTRVJUKG1fcHJvZmlsZWRDb2RlQmxv
Y2stPmlzQ29uc3RhbnRPd25lZEJ5VW5saW5rZWRDb2RlQmxvY2socmVnKSk7CiAgICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX3VubGlua2VkQ29kZUJsb2Nr
LT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7CiAgICAgICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0
cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGxvYWREb3Vi
bGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdExv
YWRUYWcoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcpCi17Ci0gICAgaWYgKHJl
Zy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgbW92ZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQo
cmVnKS50YWcoKSksIHRhZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBsb2FkMzIo
dGFnRm9yKHJlZyksIHRhZyk7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1pdExvYWRQYXlsb2Fk
KFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCkKLXsKLSAgICBpZiAocmVn
LmlzQ29uc3RhbnQoKSkgewotICAgICAgICBtb3ZlKEltbTMyKGdldENvbnN0YW50T3BlcmFuZChy
ZWcpLnBheWxvYWQoKSksIHBheWxvYWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
bG9hZDMyKHBheWxvYWRGb3IocmVnKSwgcGF5bG9hZCk7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6
ZW1pdExvYWQoY29uc3QgSlNWYWx1ZSYgdiwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5
bG9hZCkKLXsKLSAgICBtb3ZlKEltbTMyKHYucGF5bG9hZCgpKSwgcGF5bG9hZCk7Ci0gICAgbW92
ZShJbW0zMih2LnRhZygpKSwgdGFnKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBkc3Qp
Ci17Ci0gICAgZW1pdExvYWQoc3JjLCBkc3QudGFnR1BSKCksIGRzdC5wYXlsb2FkR1BSKCkpOwot
fQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1
YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCi17Ci0gICAgZW1pdFN0b3JlKGRzdCwg
ZnJvbS50YWdHUFIoKSwgZnJvbS5wYXlsb2FkR1BSKCkpOwotfQotCi1pbmxpbmUgdm9pZCBKSVQ6
OmVtaXRMb2FkKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklE
IHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVCh0YWcgIT0g
cGF5bG9hZCk7Ci0KLSAgICBpZiAoYmFzZSA9PSBjYWxsRnJhbWVSZWdpc3RlcikgewotICAgICAg
ICBSRUxFQVNFX0FTU0VSVChwYXlsb2FkICE9IGJhc2UpOwotICAgICAgICBlbWl0TG9hZFBheWxv
YWQocmVnLCBwYXlsb2FkKTsKLSAgICAgICAgZW1pdExvYWRUYWcocmVnLCB0YWcpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHBheWxvYWQgPT0gYmFzZSkgeyAvLyBhdm9pZCBz
dG9tcGluZyBiYXNlCi0gICAgICAgIGxvYWQzMih0YWdGb3IocmVnLCBiYXNlKSwgdGFnKTsKLSAg
ICAgICAgbG9hZDMyKHBheWxvYWRGb3IocmVnLCBiYXNlKSwgcGF5bG9hZCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBsb2FkMzIocGF5bG9hZEZvcihyZWcsIGJhc2UpLCBwYXlsb2Fk
KTsKLSAgICBsb2FkMzIodGFnRm9yKHJlZywgYmFzZSksIHRhZyk7Ci19Ci0KLWlubGluZSB2b2lk
IEpJVDo6ZW1pdExvYWQyKFZpcnR1YWxSZWdpc3RlciByZWcxLCBSZWdpc3RlcklEIHRhZzEsIFJl
Z2lzdGVySUQgcGF5bG9hZDEsIFZpcnR1YWxSZWdpc3RlciByZWcyLCBSZWdpc3RlcklEIHRhZzIs
IFJlZ2lzdGVySUQgcGF5bG9hZDIpCi17Ci0gICAgZW1pdExvYWQocmVnMiwgdGFnMiwgcGF5bG9h
ZDIpOwotICAgIGVtaXRMb2FkKHJlZzEsIHRhZzEsIHBheWxvYWQxKTsKLX0KIAogaW5saW5lIHZv
aWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcsIFJl
Z2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQogewpAQCAtNDgyLDEzICs0NTYsNiBA
QCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKFZpcnR1YWxSZWdpc3RlciByZWcsIFJl
Z2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbgogICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihyZWcpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjpl
bWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwg
Ym9vbCBpbmRleElzSW50MzIpCi17Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJl
ZykpOwotICAgIGlmICghaW5kZXhJc0ludDMyKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihyZWcpKTsKLX0KLQogaW5saW5lIHZvaWQgSklU
OjplbWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwg
Ym9vbCBpbmRleElzQ2VsbCkKIHsKICAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVn
KSk7CkBAIC01MDMsMTEgKzQ3MCw2IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlQm9vbChW
aXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kCiAgICAgICAg
IHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCB0YWdGb3IocmVnKSk7
CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlRG91YmxlKFZpcnR1YWxSZWdpc3RlciBy
ZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKLXsKLSAgICBzdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVz
c0ZvcihyZWcpKTsKLX0KLQogaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmUoVmlydHVhbFJlZ2lz
dGVyIHJlZywgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNlKQogewogICAg
IHN0b3JlMzIoSW1tMzIoY29uc3RhbnQucGF5bG9hZCgpKSwgcGF5bG9hZEZvcihyZWcsIGJhc2Up
KTsKQEAgLTU1Myw0NCArNTE1LDYgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6Z2V0T3BlcmFu
ZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3QKIAogI2Vsc2Ug
Ly8gVVNFKEpTVkFMVUUzMl82NCkKIAotLy8gZ2V0IGFyZyBwdXRzIGFuIGFyZyBmcm9tIHRoZSBT
RiByZWdpc3RlciBhcnJheSBpbnRvIGEgaC93IHJlZ2lzdGVyCi1BTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVy
SUQgZHN0KQotewotICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBUaGlzIG1ldGhvZCBz
aG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28g
dGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgotCi0gICAgaWYgKHNyYy5pc0NvbnN0YW50KCkp
IHsKLSAgICAgICAgaWYgKG1fcHJvZmlsZWRDb2RlQmxvY2stPmlzQ29uc3RhbnRPd25lZEJ5VW5s
aW5rZWRDb2RlQmxvY2soc3JjKSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fdW5s
aW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Ci0gICAgICAgICAgICBtb3ZlKEltbTY0
KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBkc3QpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIGRzdCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBsb2FkNjQoYWRkcmVzc0ZvcihzcmMpLCBkc3QpOwotfQotCi1BTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMs
IEpTVmFsdWVSZWdzIGRzdCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgZHN0
LnBheWxvYWRHUFIoKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1
YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMxLCBkc3QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGRz
dDIpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKLXsKLSAgICBzdG9yZTY0KGZy
b20sIGFkZHJlc3NGb3IoZHN0KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkK
LXsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgZnJvbS5wYXlsb2FkR1BSKCkpOwot
fQotCiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZCb3RoSlNDZWxscyhS
ZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMiwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogewog
ICAgIG1vdmUocmVnMSwgc2NyYXRjaCk7CkBAIC03MjUsMTQgKzY0OSwzNCBAQCBBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjpsb2FkR2xvYmFsT2JqZWN0KEdQUlJlZyByZXN1bHQpCiAgICAgbG9hZENv
bnN0YW50KG1fZ2xvYmFsT2JqZWN0Q29uc3RhbnQsIHJlc3VsdCk7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgY29uc3Rh
bnQsIEdQUlJlZyByZXN1bHQpCitBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIGxvYWRBZGRyT2ZD
b2RlQmxvY2tDb25zdGFudEJ1ZmZlcihKSVQgJmppdCwgR1BSUmVnIGRzdCkKK3sKKyAgICBqaXQu
bG9hZFB0cihqaXQuYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBkc3QpOwor
ICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhkc3QsIENvZGVCbG9jazo6b2Zmc2V0T2ZDb25z
dGFudHNWZWN0b3JCdWZmZXIoKSksIGRzdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQsIEpTVmFsdWVS
ZWdzIGRzdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0YW50KCkpOwot
ICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZXN1bHQp
OwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHQsIENvZGVCbG9jazo6b2Zmc2V0T2ZDb25zdGFu
dHNWZWN0b3JCdWZmZXIoKSksIHJlc3VsdCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwg
Y29uc3RhbnQudG9Db25zdGFudEluZGV4KCkgKiBzaXplb2Yodm9pZCopKSwgcmVzdWx0KTsKKyAg
ICBsb2FkQWRkck9mQ29kZUJsb2NrQ29uc3RhbnRCdWZmZXIoKnRoaXMsIGRzdC5wYXlsb2FkR1BS
KCkpOworICAgIGxvYWRWYWx1ZShBZGRyZXNzKGRzdC5wYXlsb2FkR1BSKCksIGNvbnN0YW50LnRv
Q29uc3RhbnRJbmRleCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGRzdCk7CiB9CiAKKyNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9hZENvZGVCbG9ja0NvbnN0
YW50UGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQsIFJlZ2lzdGVySUQgZHN0KQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50LmlzQ29uc3RhbnQoKSk7CisgICAgbG9hZEFkZHJP
ZkNvZGVCbG9ja0NvbnN0YW50QnVmZmVyKCp0aGlzLCBkc3QpOworICAgIGxvYWQzMihBZGRyZXNz
KGRzdCwgY29uc3RhbnQudG9Db25zdGFudEluZGV4KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgUGF5
bG9hZE9mZnNldCksIGRzdCk7Cit9CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkQ29kZUJs
b2NrQ29uc3RhbnRUYWcoVmlydHVhbFJlZ2lzdGVyIGNvbnN0YW50LCBSZWdpc3RlcklEIGRzdCkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudC5pc0NvbnN0YW50KCkpOworICAgIGxvYWRB
ZGRyT2ZDb2RlQmxvY2tDb25zdGFudEJ1ZmZlcigqdGhpcywgZHN0KTsKKyAgICBsb2FkMzIoQWRk
cmVzcyhkc3QsIGNvbnN0YW50LnRvQ29uc3RhbnRJbmRleCgpICogc2l6ZW9mKFJlZ2lzdGVyKSAr
IFRhZ09mZnNldCksIGRzdCk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAKaW5kZXggZjg0NDU4NzgwM2MyNjE4YzY4MDM5ODM2Y2VlNmM3YjM0ZmQyYzMwNC4uYzMyNDBi
OGZmNGI4ZTFjMGVhYTEzMmIwZThiMzg4NjEyZTZjYTZiZSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC00NSw4ICs0NSw2IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLQogdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCk7CkBAIC01NSwyNiArNTMsMjMgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAK
ICAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBpZiAobV9wcm9maWxlZENvZGVC
bG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhzcmMpKSB7Ci0gICAgICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gbV91bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3Jj
KTsKLSAgICAgICAgICAgIHN0b3JlNjQoSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGFk
ZHJlc3NGb3IoZHN0KSk7CisgICAgICAgICAgICBzdG9yZVZhbHVlKG1fdW5saW5rZWRDb2RlQmxv
Y2stPmdldENvbnN0YW50KHNyYyksIGFkZHJlc3NGb3IoZHN0KSk7CiAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoc3JjLCByZWdUMCk7Ci0gICAgICAg
ICAgICBzdG9yZTY0KHJlZ1QwLCBhZGRyZXNzRm9yKGRzdCkpOworICAgICAgICAgICAgbG9hZENv
ZGVCbG9ja0NvbnN0YW50KHNyYywganNSZWdUMTApOworICAgICAgICAgICAgc3RvcmVWYWx1ZShq
c1JlZ1QxMCwgYWRkcmVzc0Zvcihkc3QpKTsKICAgICAgICAgfQotCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBsb2FkNjQoYWRkcmVzc0ZvcihzcmMpLCByZWdUMCk7Ci0gICAgc3RvcmU2
NChyZWdUMCwgYWRkcmVzc0Zvcihkc3QpKTsKKyAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihzcmMp
LCBqc1JlZ1QxMCk7CisgICAgc3RvcmVWYWx1ZShqc1JlZ1QxMCwgYWRkcmVzc0Zvcihkc3QpKTsK
IH0KIAotCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEVuZD4oKTsKLSAgICBSRUxFQVNFX0FTU0VSVChyZXR1cm5WYWx1ZUdQUiAhPSBjYWxsRnJh
bWVSZWdpc3Rlcik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVl
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgc3RhdGljX2Fzc2VydCghcmV0dXJuVmFsdWVKU1IudXNl
cyhjYWxsRnJhbWVSZWdpc3RlcikpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV92YWx1ZSwgcmV0dXJuVmFsdWVKU1IpOwogICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMo
KTsKICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIHJldCgpOwpAQCAtODcsNiArODIs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKIH0KIAorCiB2b2lkIEpJVDo6
ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmpl
Y3Q+KCk7CkBAIC0xMDUsNyArMTAxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGxvYWQ4KEFkZHJlc3Mo
c3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNo
UmVnKTsKICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNo
UmVnKTsKICAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3QpOworICAgIGJveENlbGwocmVzdWx0UmVnLCBqc1JlZ1QxMCk7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwganNSZWdUMTApOwogCiAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKIH0KQEAgLTExOSw5ICsxMTYsMTIgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFMKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5ld09iamVjdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7CiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uTmV3T2Jq
ZWN0LCAmdm0oKSwgc3RydWN0dXJlUmVnKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOworICAgIGJveENlbGwocmV0dXJuVmFsdWVHUFIsIHJldHVyblZhbHVlSlNSKTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVKU1IpOwogfQogCisj
aWYgVVNFKEpTVkFMVUU2NCkKKwogdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0
YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+
KCk7CkBAIC0yMTAsMTIgKzIxMCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9m
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiopCi17Ci0gICAg
Ly8gVGhpcyBhbHdheXMgZ29lcyB0byBzbG93IHBhdGggc2luY2Ugd2UgZXhwZWN0IGl0IHRvIGJl
IHJhcmUuCi0gICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLX0KLSAgICAKIHZvaWQgSklUOjplbWl0
X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5PigpOwpA
QCAtMjI5LDMzICsyMjMsMzkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CiB9CiAKKyNlbmRpZgorCiB2b2lkIEpJVDo6ZW1pdF9vcF90eXBlb2ZfaXNfdW5kZWZp
bmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2ZJc1VuZGVmaW5lZD4oKTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2Vs
bChyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwganNSZWdUMTApOwor
ICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKGpzUmVnVDEwKTsKIAotICAgIGNvbXBhcmU2
NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJl
Z1QwKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGNvbXBhcmU2NChFcXVhbCwganNSZWdUMTAu
cGF5bG9hZEdQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZWdU
MCk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGNvbXBhcmUzMihFcXVhbCwganNSZWdU
MTAudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7
CisjZW5kaWYKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAgICAgCiAgICAgaXNDZWxsLmxpbmso
dGhpcyk7Ci0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChO
b25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgSnVtcCBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGpzUmVnVDEwLnBh
eWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdU
MCk7CiAgICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwogCiAgICAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1
cmUodm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7CisgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0o
KSwganNSZWdUMTAucGF5bG9hZEdQUigpLCByZWdUMSwgcmVnVDIpOwogICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9i
YWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKICAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwg
cmVnVDEsIHJlZ1QwKTsKIAogICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlz
KTsKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYm94
Qm9vbGVhbihyZWdUMCwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCBqc1JlZ1QxMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yNjQsMTUgKzI2NCwx
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQ7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwganNSZWdUMTApOwogCi0gICAgYW5kNjQoVHJ1c3Rl
ZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAg
ICBlbWl0VHVyblVuZGVmaW5lZEludG9OdWxsKGpzUmVnVDEwKTsKKyAgICBpc051bGwoanNSZWdU
MTAsIHJlZ1QwKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAg
fSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGJveEJvb2xlYW4ocmVn
VDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTAp
OwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKwogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVh
bihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwpAQCAtNDE4LDE1
ICs0MjAsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKIH0KIAorI2VuZGlmCisKIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9u
YW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+KCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1bmN0aW9uLCBhcmd1bWVudEdQ
UjEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBhcmd1bWVu
dEdQUjIpOwotICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQ
UjEsIGFyZ3VtZW50R1BSMik7CisKKyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUo
b3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9i
amVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAg
Y29uc3RleHByIEdQUlJlZyBmdW5jdGlvbkdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dP
cGVyYXRpb24sIDE+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIG5hbWVKU1IgPSBwcmVm
ZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAyPigpOworCisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUubV9mdW5jdGlvbiwgZnVuY3Rpb25HUFIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLCBuYW1lSlNSKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25TZXRGdW5jdGlvbk5hbWUsIGdsb2JhbE9iamVjdEdQUiwgZnVuY3Rpb25HUFIsIG5hbWVK
U1IpOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKwogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7CkBAIC00NDIsMjEgKzQ1NCwyNCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KTsKIH0KIAor
I2VuZGlmCisKIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSmZhbHNlPigpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGNvbnN0ZXhw
ciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgdmFsdWUg
PSBqc1JlZ1QxMDsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25k
aXRpb24sIHZhbHVlKTsKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCi0gICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aDIgPSByZWdUMjsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Qz
OworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMjsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmpl
Y3RHUFIgPSByZWdUNDsKKyAgICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcCh2YWx1ZSwgc2NyYXRj
aDEsIHNjcmF0Y2gyLCBnbG9iYWxPYmplY3RHUFIpKTsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogICAgIGxvYWRHbG9iYWxPYmpl
Y3QoZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpT
VmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBz
aG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdl
dCk7CisgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNj
cmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQsIGdsb2JhbE9iamVjdEdQUiksIHRhcmdldCk7CiAjZWxzZQogICAgIGVtaXROYWtlZE5lYXJD
YWxsKHZtKCkuZ2V0Q1RJU3R1Yih2YWx1ZUlzRmFsc2V5R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpOwogICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwg
dGFyZ2V0KTsKQEAgLTQ3Myw2ICs0ODgsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6dmFsdWVJc0ZhbHNleUdlbmVyYXRvcihWTSYgdm0pCiAgICAgQ0NhbGxI
ZWxwZXJzIGppdDsKIAogICAgIGNvbnN0ZXhwciBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICBz
dGF0aWNfYXNzZXJ0KHZhbHVlID09IGpzUmVnVDEwLnBheWxvYWRHUFIoKSk7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aDIgPSByZWdUMjsKICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSB0cnVlOwpAQCAtNTAzLDQ4ICs1MTksNTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
amVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwotICAgIEp1bXAgaXNJ
bW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLCBqc1JlZ1QxMCk7CisgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90
Q2VsbChqc1JlZ1QxMCk7CiAKICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNo
ZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgSnVt
cCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAs
IHJlZ1QyLCByZWdUMSk7CisgICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBi
cmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpOworICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwg
cmVnVDIsIHJlZ1QxKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QwKTsKICAgICBhZGRKdW1w
KGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKICAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2Jq
ZWN0SXNGb3JlaWduID0ganVtcCgpOwogCiAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRl
IGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAogICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0g
ICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0g
ICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgZW1pdFR1cm5VbmRl
ZmluZWRJbnRvTnVsbChqc1JlZ1QxMCk7CisgICAgYWRkSnVtcChicmFuY2hJZk51bGwoanNSZWdU
MTApLCB0YXJnZXQpOwogCiAgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7CiAgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKLX07
Cit9CisKIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSm5lcU51bGw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2Rl
Lm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywganNSZWdUMTApOworICAg
IEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoanNSZWdUMTApOwogCiAgICAgLy8g
Rmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
IGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwotICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVy
bywgQWRkcmVzcyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsK
KyAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIHJlZ1Qy
LCByZWdUMSk7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVtcChicmFu
Y2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zm
c2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1w
KCk7CiAKICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQg
JiBudWxsCiAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmQ2NChUcnVzdGVkSW1t
MzIofkpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkp
KSwgdGFyZ2V0KTsgICAgICAgICAgICAKKyAgICBlbWl0VHVyblVuZGVmaW5lZEludG9OdWxsKGpz
UmVnVDEwKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmTm90TnVsbChqc1JlZ1QxMCksIHRhcmdldCk7
CiAKICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKIH0KIAorI2lmIFVTRShKU1ZBTFVF
NjQpCisKIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSnVuZGVmaW5lZE9yTnVsbD4oKTsKQEAgLTU3Niw3ICs1OTUsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmMsIHJlZ1QwKTsKLSAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoYnl0ZWNvZGUubV9z
cGVjaWFsUG9pbnRlciwgcmVnVDEpOworICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChieXRlY29k
ZS5tX3NwZWNpYWxQb2ludGVyLCBKU1ZhbHVlUmVncyB7IHJlZ1QxIH0pOwogICAgIGFkZEp1bXAo
YnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwogfQogCkBAIC01ODcsNyAr
NjA2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAgICAgCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQo
Ynl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDEpOworICAgIGxvYWRDb2RlQmxvY2tDb25z
dGFudChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCBKU1ZhbHVlUmVncyB7IHJlZ1QxIH0pOwog
ICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJl
Z1QxKTsKICAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMigxKSwgYnl0ZWNvZGUsIE9w
Sm5lcVB0cjo6TWV0YWRhdGE6Om9mZnNldE9mSGFzSnVtcGVkKCkpOwogICAgIGFkZEp1bXAoanVt
cCgpLCB0YXJnZXQpOwpAQCAtNTk3LDcgKzYxNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFf
cHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1p
dF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3Jocywg
cmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9saHMsIHJlZ1Qw
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CiAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGNv
bXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZWdU
MCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKQEAgLTYwOCwyNiArNjI4LDMwIEBAIHZvaWQgSklU
OjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5t
X2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2xocywgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQo
cmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAs
IHJlZ1QxKSwgdGFyZ2V0KTsKIH0KIAorI2VuZGlmCisKIHZvaWQgSklUOjplbWl0X29wX2p0cnVl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRM
YWJlbCk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgY29uc3Rl
eHByIEpTVmFsdWVSZWdzIHZhbHVlID0ganNSZWdUMTA7CiAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7CiAjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAgICBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBn
bG9iYWxPYmplY3RHUFIgPSByZWdUMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0g
cmVnVDI7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOworICAgIGNvbnN0
ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7CisgICAgc3RhdGljX2Fzc2VydChu
b092ZXJsYXAodmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZ2xvYmFsT2JqZWN0R1BSKSk7CiAg
ICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1
ZTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7Ci0gICAgYWRkSnVtcChi
cmFuY2hJZlRydXRoeSh2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNo
MiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBn
bG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOworICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0o
KSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vs
c2UKICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc1RydXRoeUdl
bmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdldCk7CkBAIC02NDQsNiArNjY4LDcgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnZhbHVlSXNUcnV0aHlHZW5lcmF0
b3IoVk0mIHZtKQogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVn
IHZhbHVlID0gcmVnVDA7CisgICAgc3RhdGljX2Fzc2VydCh2YWx1ZSA9PSBqc1JlZ1QxMC5wYXls
b2FkR1BSKCkpOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBj
b25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CiAgICAgY29uc3RleHByIGJvb2wgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKQEAgLTY2OCwxMCArNjkzLDEz
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjp2YWx1ZUlzVHJ1
dGh5R2VuZXJhdG9yKFZNJiB2bSkKIH0KICNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisKIHZvaWQgSklUOjplbWl0X29wX25lcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3JocywgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBjb21wYXJlMzIoTm90RXF1
YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7CkBAIC02ODMsMjEgKzcxMSwyNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9q
bmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocywgcmVn
VDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2xocywgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJl
Z1QxLCByZWdUMik7CiAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1Qx
KSwgdGFyZ2V0KTsKIH0KIAorI2VuZGlmCisKIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUaHJvdz4oKTsKLSAgICBBU1NFUlQocmVnVDAgPT0g
cmV0dXJuVmFsdWVHUFIpOworICAgIHN0YXRpY19hc3NlcnQocmVnVDAgPT0gcmV0dXJuVmFsdWVH
UFIpOwogCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgIGNvcHlDYWxsZWVTYXZl
c1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9wRW50cnlGcmFtZSk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZWdUMCk7Ci0gICAgbG9h
ZEdsb2JhbE9iamVjdChyZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uVGhyb3csIHJlZ1QxLCByZWdUMCk7CisgICAgdXNpbmcgU2xvd09wZXJhdGlvbiA9
IGRlY2x0eXBlKG9wZXJhdGlvblRocm93KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9i
amVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAg
Y29uc3RleHByIEpTVmFsdWVSZWdzIHZhbHVlSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xv
d09wZXJhdGlvbiwgMT4oKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
dmFsdWUsIHZhbHVlSlNSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7
CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIGdsb2Jh
bE9iamVjdEdQUiwgdmFsdWVKU1IpOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7
CiAjZWxzZQogICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSBhcmd1bWVu
dEdQUjI7CkBAIC03NDAsNiArNzc0LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSVQ6Om9wX3Rocm93X2hhbmRsZXJHZW5lcmF0b3IoVk0mIHZtKQogfQogI2VuZGlm
IC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKwogdGVt
cGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKQEAgLTc0OCw3ICs3ODQsOCBAQCB2b2lk
IEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwg
cmVnVDEpOwogCiAjaWYgVVNFKEJJR0lOVDMyKQogICAgIC8qIEF0IGEgaGlnaCBsZXZlbCB3ZSBk
byAoYXNzdW1pbmcgJ3R5cGUnIHRvIGJlIFN0cmljdEVxKToKQEAgLTgzMyw3ICs4NzAsOCBAQCB2
b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYzIsIHJlZ1QxKTsKIAogI2lmIFVTRShCSUdJTlQzMikKICAgICAvKiBBdCBhIGhpZ2ggbGV2
ZWwgd2UgZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CkBAIC0xMDQ4LDYgKzEw
ODYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2Rz
dCwgcmVnVDApOwogfQogCisjZW5kaWYKKwogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoSW1tPigpOwpAQCAtMTA2MSwxNiAr
MTEwMSwxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3Jk
KHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3Jk
OjpJbW1lZGlhdGUpKTsKICAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRh
YmxlKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0g
ICAgYXV0byBub3RJbnQzMiA9IGJyYW5jaElmTm90SW50MzIocmVnVDApOwotICAgIHN1YjMyKElt
bTMyKHVubGlua2VkVGFibGUubV9taW4pLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY3J1dGluZWUsIGpzUmVnVDEwKTsKKyAgICBhdXRvIG5vdEludDMyID0gYnJhbmNoSWZO
b3RJbnQzMihqc1JlZ1QxMCk7CisgICAgc3ViMzIoSW1tMzIodW5saW5rZWRUYWJsZS5tX21pbiks
IGpzUmVnVDEwLnBheWxvYWRHUFIoKSk7CiAKLSAgICBhZGRKdW1wKGJyYW5jaDMyKEFib3ZlT3JF
cXVhbCwgcmVnVDAsIEltbTMyKGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXplKCkpKSwgZGVm
YXVsdE9mZnNldCk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGxpbmtlZFRhYmxlLm1fY3RpT2Zm
c2V0cy5kYXRhKCkpLCByZWdUMSk7Ci0gICAgZmFySnVtcChCYXNlSW5kZXgocmVnVDEsIHJlZ1Qw
LCBTY2FsZVB0ciksIEpTU3dpdGNoUHRyVGFnKTsKKyAgICBhZGRKdW1wKGJyYW5jaDMyKEFib3Zl
T3JFcXVhbCwganNSZWdUMTAucGF5bG9hZEdQUigpLCBJbW0zMihsaW5rZWRUYWJsZS5tX2N0aU9m
ZnNldHMuc2l6ZSgpKSksIGRlZmF1bHRPZmZzZXQpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihs
aW5rZWRUYWJsZS5tX2N0aU9mZnNldHMuZGF0YSgpKSwgcmVnVDIpOworICAgIGxvYWRQdHIoQmFz
ZUluZGV4KHJlZ1QyLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIFNjYWxlUHRyKSwgcmVnVDIpOwor
ICAgIGZhckp1bXAocmVnVDIsIEpTU3dpdGNoUHRyVGFnKTsKIAogICAgIG5vdEludDMyLmxpbmso
dGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uU3dpdGNo
SW1tV2l0aFVua25vd25LZXlUeXBlLCAmdm0oKSwgcmVnVDAsIHRhYmxlSW5kZXgsIHVubGlua2Vk
VGFibGUubV9taW4pOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
blN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgJnZtKCksIGpzUmVnVDEwLCB0YWJsZUluZGV4
LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3
aXRjaFB0clRhZyk7CiB9CiAKQEAgLTEwODksOSArMTEzMCwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
IG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5k
ZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CiAgICAgbGlua2Vk
VGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1lbnRHUFIxKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0
KGFyZ3VtZW50R1BSMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0
aFVua25vd25LZXlUeXBlLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgdGFibGVJbmRleCwg
dW5saW5rZWRUYWJsZS5tX21pbik7CisgICAgdXNpbmcgU2xvd09wZXJhdGlvbiA9IGRlY2x0eXBl
KG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUpOworICAgIGNvbnN0ZXhwciBH
UFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlv
biwgMD4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3Mgc2NydXRpbmVlSlNSID0gcHJlZmVy
cmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMT4oKTsKKworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NydXRpbmVlLCBzY3J1dGluZWVKU1IpOworICAgIGxvYWRHbG9iYWxPYmplY3Qo
Z2xvYmFsT2JqZWN0R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJX
aXRoVW5rbm93bktleVR5cGUsIGdsb2JhbE9iamVjdEdQUiwgc2NydXRpbmVlSlNSLCB0YWJsZUlu
ZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKICAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBK
U1N3aXRjaFB0clRhZyk7CiB9CiAKQEAgLTExMDgsOSArMTE1MywxMyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNv
ZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKICAgICBsaW5r
ZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBhcmd1bWVudEdQUjEpOwotICAgIGxvYWRHbG9iYWxPYmpl
Y3QoYXJndW1lbnRHUFIwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmlu
Z1dpdGhVbmtub3duS2V5VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIHRhYmxlSW5k
ZXgpOworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25Td2l0Y2hT
dHJpbmdXaXRoVW5rbm93bktleVR5cGUpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2Jq
ZWN0R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4oKTsKKyAgICBj
b25zdGV4cHIgSlNWYWx1ZVJlZ3Mgc2NydXRpbmVlSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8
U2xvd09wZXJhdGlvbiwgMT4oKTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRp
bmVlLCBzY3J1dGluZWVKU1IpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BS
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5
VHlwZSwgZ2xvYmFsT2JqZWN0R1BSLCBzY3J1dGluZWVKU1IsIHRhYmxlSW5kZXgpOwogICAgIGZh
ckp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKIH0KIApAQCAtMTEyMCwxNSAr
MTE2OSwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVk
aWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMxLCBqc1JlZ1QxMCk7CisgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2Vs
bChqc1JlZ1QxMCk7CiAKLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5j
aFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICBKdW1wIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MoanNS
ZWdUMTAucGF5bG9hZEdQUigpLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIo
MCksIHJlZ1QwKTsKICAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1w
KCk7CiAKICAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0
TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICBlbWl0TG9hZFN0
cnVjdHVyZSh2bSgpLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIHJlZ1QyLCByZWdUMSk7CiAgICAg
bG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwogICAgIGNvbXBhcmVQdHIoRXF1
YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwpAQCAtMTEzNiwxNCArMTE4NSwxNCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAKICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMy
KH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICBlbWl0
VHVyblVuZGVmaW5lZEludG9OdWxsKGpzUmVnVDEwKTsKKyAgICBpc051bGwoanNSZWdUMTAsIHJl
Z1QwKTsKIAogICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwogICAgIHdhc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwganNSZWdUMTApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTE1MiwxNSArMTIwMSwxNSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwg
anNSZWdUMTApOworICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwoanNSZWdU
MTApOwogCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChO
b25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgSnVtcCBpc01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGpzUmVnVDEwLnBh
eWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdU
MCk7CiAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwogCiAg
ICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1
Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgZW1pdExvYWRTdHJ1Y3R1cmUo
dm0oKSwganNSZWdUMTAucGF5bG9hZEdQUigpLCByZWdUMiwgcmVnVDEpOwogICAgIGxvYWRHbG9i
YWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpn
bG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKE5vdEVxdWFsLCBy
ZWdUMCwgcmVnVDIsIHJlZ1QwKTsKQEAgLTExNjgsMTYgKzEyMTcsMTggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAog
ICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CiAKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIofkpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgcmVnVDApOworICAgIGVtaXRU
dXJuVW5kZWZpbmVkSW50b051bGwoanNSZWdUMTApOworICAgIGlzTm90TnVsbChqc1JlZ1QxMCwg
cmVnVDApOwogCiAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CiAgICAgd2FzTm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwogCi0gICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgYm94Qm9vbGVhbihyZWdUMCwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCBqc1JlZ1QxMCk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiopCiB7CiAgICAgLy8gRXZlbiB0aG91
Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CkBAIC0x
MzA0LDE2ICsxMzU1LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdU
MCk7CiB9CiAKKyNlbmRpZgorCiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3NyY0RzdCwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9zcmNEc3QsIGpzUmVnVDEwKTsKIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGpzUmVnVDEw
KTsKIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdUMSwgRmluYWxPYmplY3RU
eXBlKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKGpzUmVnVDEwLnBheWxvYWRH
UFIoKSwgRmluYWxPYmplY3RUeXBlKSk7CiAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcFRvVGhpczo6TWV0YWRhdGE6Om9mZnNldE9mQ2FjaGVkU3RydWN0dXJlSUQoKSwgcmVnVDIp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKE5vdEVxdWFsLCBBZGRyZXNzKGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRl
X3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEzMjgsNyAr
MTM4MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgUmVnaXN0ZXJJRCBjYWNoZWRGdW5jdGlvblJlZyA9
IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QzOwogCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlclBheWxvYWQoY2FsbGVlLCBjYWxsZWVSZWcpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90RnVuY3Rpb24oY2FsbGVlUmVnKSk7CiAgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJl
ZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgcmFyZURhdGFS
ZWcpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmFyZURhdGFSZWcsIFRy
dXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpKTsKQEAgLTEzNDcsOSArMTQwMCwx
MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRS
ZWcsIHNjcmF0Y2hSZWcpOwogICAgIG11dGF0b3JGZW5jZSgqbV92bSk7CiAgICAgYWRkU2xvd0Nh
c2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0
KTsKKyAgICBib3hDZWxsKHJlc3VsdFJlZywganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIGpzUmVnVDEwKTsKIH0KIAorI2lmIFVTRShKU1ZBTFVF
NjQpCisKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wQ2hlY2tUZHo+KCk7CkBAIC0xNDA1LDYgKzE0NjEsMTQgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXMKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCisjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKKwor
dm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQor
eworICAgIC8vIFRoaXMgYWx3YXlzIGdvZXMgdG8gc2xvdyBwYXRoIHNpbmNlIHdlIGV4cGVjdCBp
dCB0byBiZSByYXJlLgorICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Cit9CisKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CkBAIC0xNDE1LDE2ICsxNDc5LDIyIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWCiAgICAgVmlydHVhbFJlZ2lzdGVyIGNvbnN0cnVjdG9yID0gYnl0ZWNv
ZGUubV9jb25zdHJ1Y3RvcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaGFzSW5zdGFuY2VWYWx1ZSA9
IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihjb25zdHJ1Y3RvciwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7Ci0g
ICAgbG9hZEdsb2JhbE9iamVjdChHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBH
UFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIzKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7
IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1
cm5WYWx1ZUdQUik7Ci19CisgICAgdXNpbmcgU2xvd09wZXJhdGlvbiA9IGRlY2x0eXBlKG9wZXJh
dGlvbkluc3RhbmNlT2ZDdXN0b20pOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2JqZWN0
R1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMD4oKTsKKyAgICBjb25z
dGV4cHIgSlNWYWx1ZVJlZ3MgdmFsdWVKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3Bl
cmF0aW9uLCAxPigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgY29uc3RydWN0b3JHUFIgPSBwcmVm
ZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAyPigpOworICAgIGNvbnN0ZXhwciBKU1Zh
bHVlUmVncyBoYXNJbnN0YW5jZVZhbHVlSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09w
ZXJhdGlvbiwgMz4oKTsKIAotI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVKU1IpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJQYXlsb2FkKGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvckdQUik7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBoYXNJbnN0YW5jZVZhbHVlSlNSKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7CisgICAgY2FsbE9wZXJhdGlvbigKKyAg
ICAgICAgb3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwKKyAgICAgICAgZ2xvYmFsT2JqZWN0R1BS
LCB2YWx1ZUpTUiwgY29uc3RydWN0b3JHUFIsIGhhc0luc3RhbmNlVmFsdWVKU1IpOworICAgIGJv
eEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIHJldHVyblZhbHVlSlNSKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVKU1IpOworfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9kZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewpAQCAtMTQ0
MywxNCArMTUxMyw5IEBAIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChjb25zdCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24pCiAgICAgICAgIGxvYWRQdHIocHRyLCByZWdUMCk7CiAgICAgICAg
IGF1dG8gc2tpcEVhcmx5UmV0dXJuID0gYnJhbmNoUHRyKEJlbG93LCByZWdUMCwgVHJ1c3RlZElt
bVB0cihPcHRpb25zOjplYXJseVJldHVybkZyb21JbmZpbml0ZUxvb3BzTGltaXQoKSkpOwogCi0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVzdWx0UmVncy5n
cHIoKSk7Ci0jZWxzZQotICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLSAgICAgICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOwotI2VuZGlmCisg
ICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmV0dXJuVmFsdWVKU1IucGF5bG9hZEdQUigpKTsKKyAg
ICAgICAgYm94Q2VsbChyZXR1cm5WYWx1ZUpTUi5wYXlsb2FkR1BSKCksIHJldHVyblZhbHVlSlNS
KTsKKwogICAgICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgICAgICBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CkBA
IC0xNTg4LDExICsxNjUzLDcgQEAgdm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7Ci0jZWxzZQotICAgIGVtaXRMb2Fk
UGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwotI2VuZGlmCisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIx
KTsKICAgICBhdXRvIGNvbnN0YW50ID0gYWRkVG9Db25zdGFudFBvb2woSklUQ29uc3RhbnRQb29s
OjpUeXBlOjpGdW5jdGlvbkRlY2wsIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWlu
dHB0cl90PihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCkpKTsKICAgICBsb2FkQ29uc3RhbnQoY29u
c3RhbnQsIGFyZ3VtZW50R1BSMik7CiAKQEAgLTE2MzQsMTIgKzE2OTUsOCBAQCB2b2lkIEpJVDo6
ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCBhcmd1
bWVudEdQUjEpOwotI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwg
YXJndW1lbnRHUFIxKTsKLSNlbmRpZgogCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxv
YWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKICAgICBhdXRvIGNvbnN0YW50ID0g
YWRkVG9Db25zdGFudFBvb2woSklUQ29uc3RhbnRQb29sOjpUeXBlOjpGdW5jdGlvbkV4cHIsIGJp
dHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihieXRlY29kZS5tX2Z1bmN0
aW9uRGVjbCkpKTsKICAgICBsb2FkQ29uc3RhbnQoY29uc3RhbnQsIGFyZ3VtZW50R1BSMik7CiAg
ICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CkBAIC0xNjkzLDIwICsxNzUwLDE3
IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzaXplSW5kZXggPSBieXRl
Y29kZS5tX2xlbmd0aDsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1hdGVyaWFsaXplUG9pbnRl
ckludG9NZXRhZGF0YShieXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZBcnJheUFsbG9jYXRpb25Qcm9maWxlKCksIGFyZ3VtZW50R1BSMSk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIGFyZ3VtZW50R1BSMik7Ci0gICAgbG9hZEdsb2Jh
bE9iamVjdChhcmd1bWVudEdQUjApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJy
YXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFy
Z3VtZW50R1BSMik7Ci0jZWxzZQotICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShi
eXRlY29kZSwgT3BOZXdBcnJheVdpdGhTaXplOjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheUFsbG9j
YXRpb25Qcm9maWxlKCksIHJlZ1QyKTsKLSAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJlZ1QxLCBy
ZWdUMCk7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCByZWdUMywgcmVnVDIsIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwotI2VuZGlmCi19CiAKLSNpZiBVU0UoSlNWQUxVRTY0
KQorICAgIHVzaW5nIE9wZXJhdGlvbiA9IGRlY2x0eXBlKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNp
emVBbmRQcm9maWxlKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHBy
ZWZlcnJlZEFyZ3VtZW50R1BSPE9wZXJhdGlvbiwgMD4oKTsKKyAgICBjb25zdGV4cHIgR1BSUmVn
IHByb2ZpbGVHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxPcGVyYXRpb24sIDE+KCk7CisgICAg
Y29uc3RleHByIEpTVmFsdWVSZWdzIHNpemVKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxPcGVy
YXRpb24sIDI+KCk7CisKKyAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNpemVJ
bmRleCwgc2l6ZUpTUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRz
dCwgZ2xvYmFsT2JqZWN0R1BSLCBwcm9maWxlR1BSLCBzaXplSlNSKTsKK30KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CkBAIC0xNzE3LDU2ICsxNzcxLDU2IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVf
dHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFR5cGVMb2Nh
dGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFs
UmVnaXN0ZXI7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlVG9Qcm9maWxlLCBy
ZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwganNSZWdU
MTApOwogCiAgICAgSnVtcExpc3QganVtcFRvRW5kOwogCi0gICAganVtcFRvRW5kLmFwcGVuZChi
cmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZkVtcHR5
KGpzUmVnVDEwKSk7CiAKICAgICAvLyBDb21waWxlIGluIGEgcHJlZGljdGl2ZSB0eXBlIGNoZWNr
LCBpZiBwb3NzaWJsZSwgdG8gc2VlIGlmIHdlIGNhbiBza2lwIHdyaXRpbmcgdG8gdGhlIGxvZy4K
ICAgICAvLyBUaGVzZSB0eXBlY2hlY2tzIGFyZSBpbmxpbmVkIHRvIG1hdGNoIHRob3NlIG9mIHRo
ZSA2NC1iaXQgSlNWYWx1ZSB0eXBlIGNoZWNrcy4KICAgICBpZiAoY2FjaGVkVHlwZUxvY2F0aW9u
LT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlVW5kZWZpbmVkKQotICAgICAgICBqdW1wVG9FbmQuYXBw
ZW5kKGJyYW5jaElmVW5kZWZpbmVkKHJlZ1QwKSk7CisgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQo
YnJhbmNoSWZVbmRlZmluZWQoanNSZWdUMTApKTsKICAgICBlbHNlIGlmIChjYWNoZWRUeXBlTG9j
YXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVOdWxsKQotICAgICAgICBqdW1wVG9FbmQuYXBw
ZW5kKGJyYW5jaElmTnVsbChyZWdUMCkpOworICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5j
aElmTnVsbChqc1JlZ1QxMCkpOwogICAgIGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9s
YXN0U2VlblR5cGUgPT0gVHlwZUJvb2xlYW4pCi0gICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJh
bmNoSWZCb29sZWFuKHJlZ1QwLCByZWdUMSkpOworICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJy
YW5jaElmQm9vbGVhbihqc1JlZ1QxMCwgcmVnVDIpKTsKICAgICBlbHNlIGlmIChjYWNoZWRUeXBl
TG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVBbnlJbnQpCi0gICAgICAgIGp1bXBUb0Vu
ZC5hcHBlbmQoYnJhbmNoSWZJbnQzMihyZWdUMCkpOworICAgICAgICBqdW1wVG9FbmQuYXBwZW5k
KGJyYW5jaElmSW50MzIoanNSZWdUMTApKTsKICAgICBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRp
b24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVOdW1iZXIpCi0gICAgICAgIGp1bXBUb0VuZC5hcHBl
bmQoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKKyAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFu
Y2hJZk51bWJlcihqc1JlZ1QxMCwgcmVnVDIpKTsKICAgICBlbHNlIGlmIChjYWNoZWRUeXBlTG9j
YXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVTdHJpbmcpIHsKLSAgICAgICAgSnVtcCBpc05v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBqdW1wVG9FbmQuYXBwZW5k
KGJyYW5jaElmU3RyaW5nKHJlZ1QwKSk7CisgICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKGpzUmVnVDEwKTsKKyAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZlN0
cmluZyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCkpKTsKICAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhp
cyk7CiAgICAgfQogCiAgICAgLy8gTG9hZCB0aGUgdHlwZSBwcm9maWxpbmcgbG9nIGludG8gVDIu
CiAgICAgVHlwZVByb2ZpbGVyTG9nKiBjYWNoZWRUeXBlUHJvZmlsZXJMb2cgPSBtX3ZtLT50eXBl
UHJvZmlsZXJMb2coKTsKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY2FjaGVkVHlwZVByb2ZpbGVy
TG9nKSwgcmVnVDIpOwotICAgIC8vIExvYWQgdGhlIG5leHQgbG9nIGVudHJ5IGludG8gVDEuCi0g
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBUeXBlUHJvZmlsZXJMb2c6OmN1cnJlbnRMb2dFbnRy
eU9mZnNldCgpKSwgcmVnVDEpOworICAgIC8vIExvYWQgdGhlIG5leHQgbG9nIGVudHJ5IGludG8g
VDMuCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBUeXBlUHJvZmlsZXJMb2c6OmN1cnJlbnRM
b2dFbnRyeU9mZnNldCgpKSwgcmVnVDMpOwogCiAgICAgLy8gU3RvcmUgdGhlIEpTVmFsdWUgb250
byB0aGUgbG9nIGVudHJ5LgotICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MocmVnVDEsIFR5cGVQ
cm9maWxlckxvZzo6TG9nRW50cnk6OnZhbHVlT2Zmc2V0KCkpKTsKKyAgICBzdG9yZVZhbHVlKGpz
UmVnVDEwLCBBZGRyZXNzKHJlZ1QzLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojp2YWx1ZU9m
ZnNldCgpKSk7CiAKLSAgICAvLyBTdG9yZSB0aGUgc3RydWN0dXJlSUQgb2YgdGhlIGNlbGwgaWYg
VDAgaXMgYSBjZWxsLCBvdGhlcndpc2UsIHN0b3JlIDAgb24gdGhlIGxvZyBlbnRyeS4KLSAgICBK
dW1wIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGxvYWQzMihBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3RvcmUz
MihyZWdUMCwgQWRkcmVzcyhyZWdUMSwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6c3RydWN0
dXJlSURPZmZzZXQoKSkpOworICAgIC8vIFN0b3JlIHRoZSBzdHJ1Y3R1cmVJRCBvZiB0aGUgY2Vs
bCBpZiBqc1JlZ1QxMCBpcyBhIGNlbGwsIG90aGVyd2lzZSwgc3RvcmUgMCBvbiB0aGUgbG9nIGVu
dHJ5LgorICAgIEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChqc1JlZ1QxMCk7CisgICAg
bG9hZDMyKEFkZHJlc3MoanNSZWdUMTAucGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhyZWdUMywgVHlw
ZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6c3RydWN0dXJlSURPZmZzZXQoKSkpOwogICAgIEp1bXAg
c2tpcElzQ2VsbCA9IGp1bXAoKTsKICAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgc3RvcmUz
MihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MocmVnVDEsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50
cnk6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwg
QWRkcmVzcyhyZWdUMywgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6c3RydWN0dXJlSURPZmZz
ZXQoKSkpOwogICAgIHNraXBJc0NlbGwubGluayh0aGlzKTsKIAogICAgIC8vIFN0b3JlIHRoZSB0
eXBlTG9jYXRpb24gb24gdGhlIGxvZyBlbnRyeS4KICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY2Fj
aGVkVHlwZUxvY2F0aW9uKSwgcmVnVDApOwotICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MocmVn
VDEsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OmxvY2F0aW9uT2Zmc2V0KCkpKTsKKyAgICBz
dG9yZVB0cihyZWdUMCwgQWRkcmVzcyhyZWdUMywgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6
bG9jYXRpb25PZmZzZXQoKSkpOwogCiAgICAgLy8gSW5jcmVtZW50IHRoZSBjdXJyZW50IGxvZyBl
bnRyeS4KLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihUeXBlUHJvZmlsZXJMb2c6Okxv
Z0VudHJ5KSksIHJlZ1QxKTsKLSAgICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBUeXBl
UHJvZmlsZXJMb2c6OmN1cnJlbnRMb2dFbnRyeU9mZnNldCgpKSk7Ci0gICAgSnVtcCBza2lwQ2xl
YXJMb2cgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tUHRyKGNhY2hlZFR5
cGVQcm9maWxlckxvZy0+bG9nRW5kUHRyKCkpKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNp
emVvZihUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5KSksIHJlZ1QzKTsKKyAgICBzdG9yZVB0cihy
ZWdUMywgQWRkcmVzcyhyZWdUMiwgVHlwZVByb2ZpbGVyTG9nOjpjdXJyZW50TG9nRW50cnlPZmZz
ZXQoKSkpOworICAgIEp1bXAgc2tpcENsZWFyTG9nID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdU
MywgVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlUHJvZmlsZXJMb2ctPmxvZ0VuZFB0cigpKSk7CiAg
ICAgLy8gQ2xlYXIgdGhlIGxvZyBpZiB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBsb2cuCiAgICAg
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uUHJvY2Vzc1R5cGVQcm9maWxl
ckxvZywgJnZtKCkpOwogICAgIHNraXBDbGVhckxvZy5saW5rKHRoaXMpOwpAQCAtMTc3OCwxMyAr
MTgzMiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdAogewogICAgIFJFTEVBU0VfQVNTRVJU
KHZtKCkuc2hhZG93Q2hpY2tlbigpKTsKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKLSAgICBz
dGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwg
IndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CisgICAgc3RhdGljX2Fz
c2VydChub092ZXJsYXAocmVnVDAsIG5vbkFyZ0dQUjAsIHJlZ1QyKSwgIndlIHdpbGwgaGF2ZSBw
cm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuUHJvbG9ndWU+KCk7CiAgICAgR1BSUmVn
IHNoYWRvd1BhY2tldFJlZyA9IHJlZ1QwOwogICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFy
Z0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KICAgICBHUFJS
ZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZt
KCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7CiAgICAgbG9n
U2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcs
IHJlZ1QzKTsKIH0KIApAQCAtMTc5Miw3ICsxODQ2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9n
X3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4oKSk7CiAgICAgdXBk
YXRlVG9wQ2FsbEZyYW1lKCk7Ci0gICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1Qw
ICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBp
cyB0cnVlLiIpOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKHJlZ1QwLCBub25BcmdHUFIw
LCByZWdUMiksICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOworICAg
IHN0YXRpY19hc3NlcnQobm9PdmVybGFwKHJlZ1QwLCByZWdUMSwganNSZWdUMzIsIHJlZ1Q0KSwg
IndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsK
ICAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7CiAgICAgewpAQCAtMTgwMCwxNCAr
MTg1NSwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBHUFJSZWcgc2NyYXRj
aDJSZWcgPSByZWdUMjsKICAgICAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBz
aGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CiAgICAgfQotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1QyKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1QzKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCBqc1JlZ1QzMik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDQpOwog
ICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMSk7
Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBKU1ZhbHVl
UmVncyhyZWdUMiksIHJlZ1QzLCByZWdUMSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgp
KTsKKyAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIGpzUmVn
VDMyLCByZWdUNCwgcmVnVDEsIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSk7CiB9CiAK
LSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2Nv
bnRyb2xfZmxvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IG1faXNTaGFyZWFibGUgPSBmYWxzZTsKQEAgLTE4NjgsMjggKzE5MjEsMjQgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1
bWVudD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
aW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzKHJlZ1QxLCByZWdUMCk7Ci0jZW5kaWYKIAogICAgIGxvYWQzMihwYXlsb2FkRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOwogICAgIEp1
bXAgYXJndW1lbnRPdXRPZkJvdW5kcyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIs
IFRydXN0ZWRJbW0zMihpbmRleCkpOwotICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdz
KTsKKyAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xv
dDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwganNSZWdUMTApOwogICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKIAogICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKLSAgICBtb3ZlVmFs
dWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7CisgICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVk
KCksIGpzUmVnVDEwKTsKIAogICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmVzdWx0UmVncyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBqc1JlZ1QxMCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldFByb3RvdHlwZU9mPigpOworCiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MocmVnVDIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCmluZGV4IGQ0ODQzNGNlZmZhOWU1MjcxNzcyOWMzNTQ0MDc5NTc4YWNmZTE3ODMuLjEy
MmM5YWFhZjYxODY5MjQ1ZDg3MjVkZTY0Y2QyZTk3NzVjMDI1ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTUwLDczICs1MCw2IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCi12b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE1vdj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fc3JjOwotICAg
IAotICAgIGlmIChzcmMuaXNDb25zdGFudCgpKQotICAgICAgICBlbWl0U3RvcmUoZHN0LCBnZXRD
b25zdGFudE9wZXJhbmQoc3JjKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGVtaXRMb2FkKHNyYywg
cmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIEFTU0VSVChyZXR1cm5WYWx1ZUdQUiAhPSBjYWxsRnJhbWVS
ZWdpc3Rlcik7Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BF
bmQ+KCk7Ci0gICAgZW1pdExvYWQoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDEsIHJldHVyblZhbHVl
R1BSKTsKLSAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoKTsKLSAgICByZXQoKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbXA+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAg
IGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2Jq
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKLSAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUuc3RydWN0dXJlKCk7Ci0gICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVj
dDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBBbGxv
Y2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yTm9uVmlydHVhbENvbmN1cnJlbnRseTxKU0Zp
bmFsT2JqZWN0PigqbV92bSwgYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9j
YXRvcklmRXhpc3RzKTsKLQotICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmV0dXJuVmFsdWVH
UFI7Ci0gICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKLSAgICBSZWdpc3RlcklE
IHNjcmF0Y2hSZWcgPSByZWdUMzsKLQotICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBhZGRT
bG93Q2FzZShqdW1wKCkpOwotICAgIGVsc2UgewotICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7
Ci0gICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAgICAg
ICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50
KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0
ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRJbml0aWFsaXplSW5s
aW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAg
ICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNv
ZGUubV9kc3QsIHJlc3VsdFJlZyk7Ci0gICAgfQotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
d09iamVjdD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJv
ZmlsZWRDb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUuc3RydWN0dXJlKCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uTmV3T2JqZWN0LCAmdm0oKSwgc3RydWN0dXJlKTsKLSAgICBlbWl0U3RvcmVDZWxs
KGRzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNf
aGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJ
bnN0YW5jZT4oKTsKQEAgLTEyNCwxMyArNTcsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJp
ZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0lu
c3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0TG9hZFBheWxvYWQoaGFzSW5zdGFuY2VWYWx1ZSwgcmVn
VDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGhhc0luc3RhbmNlVmFsdWUs
IHJlZ1QwKTsKICAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFz
SW5zdGFuY2Ugd291bGQgZG8uCiAgICAgSnVtcCBoYXNJbnN0YW5jZVZhbHVlTm90Q2VsbCA9IGVt
aXRKdW1wSWZOb3RKU0NlbGwoaGFzSW5zdGFuY2VWYWx1ZSk7Ci0gICAgSnVtcCBjdXN0b21oYXNJ
bnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0ciht
X3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3Rh
bmNlU3ltYm9sRnVuY3Rpb24oKSkpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAg
IEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAs
IEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV9mdW5jdGlv
blByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbikpKTsKIAogICAgIC8vIFdlIGtub3cgdGhh
dCBjb25zdHJ1Y3RvciBpcyBhbiBvYmplY3QgZnJvbSB0aGUgd2F5IGJ5dGVjb2RlIGlzIGVtaXR0
ZWQgZm9yIGluc3RhbmNlb2YgZXhwcmVzc2lvbnMuCi0gICAgZW1pdExvYWRQYXlsb2FkKGNvbnN0
cnVjdG9yLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoY29uc3Ry
dWN0b3IsIHJlZ1QwKTsKIAogICAgIC8vIENoZWNrIHRoYXQgY29uc3RydWN0b3IgJ0ltcGxlbWVu
dHNEZWZhdWx0SGFzSW5zdGFuY2UnIGkuZS4gdGhlIG9iamVjdCBpcyBub3QgYSBDLUFQSSB1c2Vy
IG5vciBhIGJvdW5kIGZ1bmN0aW9uLgogICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZh
dWx0SGFzSW5zdGFuY2UpLCByZWdUMCk7CkBAIC0xNTksOCArOTMsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgdXNpbmcgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMUdQUjsKICAgICB1
c2luZyBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnNjcmF0Y2gyR1BSOwogCi0gICAgZW1p
dExvYWRQYXlsb2FkKHZhbHVlLCB2YWx1ZUpTUi5wYXlsb2FkR1BSKCkpOwotICAgIGVtaXRMb2Fk
UGF5bG9hZChwcm90bywgcHJvdG9KU1IucGF5bG9hZEdQUigpKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyUGF5bG9hZCh2YWx1ZSwgdmFsdWVKU1IucGF5bG9hZEdQUigpKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChwcm90bywgcHJvdG9KU1IucGF5bG9hZEdQUigpKTsK
IAogICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBj
ZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0
YW5jZS4KICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWUpOwpAQCAtMTg4LDEy
ICsxMjIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlc3VsdEdQUik7
CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0
aW9uKikKLXsKLSAgICAvLyBUaGlzIGFsd2F5cyBnb2VzIHRvIHNsb3cgcGF0aCBzaW5jZSB3ZSBl
eHBlY3QgaXQgdG8gYmUgcmFyZS4KLSAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotfQotCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CkBAIC0yMTQsMTUgKzE0MiwxMiBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8UwogICAgIHVzaW5nIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6cHJv
dG9KU1I7CiAgICAgc3RhdGljX2Fzc2VydCh2YWx1ZUpTUiA9PSBwcmVmZXJyZWRBcmd1bWVudEpT
UjxTbG93T3BlcmF0aW9uLCAyPigpKTsKICAgICAvLyBQcm90byB3aWxsIGJlIHBhc3NlZCBvbiBz
dGFjaywganVzdCBtYWtlIHN1cmUgbm8gb3ZlcmxhcAotICAgIHN0YXRpY19hc3NlcnQoIXByb3Rv
SlNSLnVzZXMoZ2xvYmFsT2JqZWN0R1BSKSk7Ci0gICAgc3RhdGljX2Fzc2VydCghcHJvdG9KU1Iu
dXNlcyhzdHViSW5mb0dQUikpOwotICAgIHN0YXRpY19hc3NlcnQoIXZhbHVlSlNSLnVzZXMoZ2xv
YmFsT2JqZWN0R1BSKSk7Ci0gICAgc3RhdGljX2Fzc2VydCghdmFsdWVKU1IudXNlcyhzdHViSW5m
b0dQUikpOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKHZhbHVlSlNSLCBwcm90b0pTUiwg
Z2xvYmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUikpOwogCiAgICAgbG9hZEdsb2JhbE9iamVjdChn
bG9iYWxPYmplY3RHUFIpOwogICAgIGxvYWRDb25zdGFudChnZW4ubV91bmxpbmtlZFN0dWJJbmZv
Q29uc3RhbnRJbmRleCwgc3R1YkluZm9HUFIpOwotICAgIGVtaXRMb2FkVGFnKHZhbHVlLCB2YWx1
ZUpTUi50YWdHUFIoKSk7Ci0gICAgZW1pdExvYWRUYWcocHJvdG8sIHByb3RvSlNSLnRhZ0dQUigp
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHZhbHVlLCB2YWx1ZUpTUi50YWdHUFIo
KSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyhwcm90bywgcHJvdG9KU1IudGFnR1BS
KCkpOwogICAgIGNhbGxPcGVyYXRpb248U2xvd09wZXJhdGlvbj4oCiAgICAgICAgIEFkZHJlc3Mo
c3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSks
CiAgICAgICAgIGRzdCwKQEAgLTIzMCw4MyArMTU1LDI1IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwog
fQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwotICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1
Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGhhc0lu
c3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7Ci0KLSAgICBlbWl0TG9h
ZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZFBheWxvYWQoY29uc3RydWN0b3Is
IHJlZ1QyKTsKLSAgICBlbWl0TG9hZChoYXNJbnN0YW5jZVZhbHVlLCByZWdUNCwgcmVnVDMpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgbV9wcm9maWxlZENv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHJlZ1Qy
LCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpKTsKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOwotfQotICAgIAogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVj
b2RlLm1fb3BlcmFuZDsKICAgICAKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSwgcmVnVDApOwogICAgIGNv
bXBhcmUzMihFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFn
KSwgcmVnVDApOwogCiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKLSAgICAKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBKdW1w
IGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMSk7Ci0KLSAgICBjb21wYXJlMzIoRXF1YWwsIHJl
Z1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKLSAgICAKLSAgICBpc0NlbGwubGluayh0aGlzKTsKLSAgICBKdW1w
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwot
ICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLSAgICAKLSAgICBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7
Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNl
dCgpKSwgcmVnVDEpOwotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7
Ci0KLSAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZG9uZS5s
aW5rKHRoaXMpOwotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwotCi0gICAgZW1pdExvYWRUYWcodmFsdWUsIHJlZ1QwKTsKLSAgICBzdGF0aWNfYXNzZXJ0
KChKU1ZhbHVlOjpVbmRlZmluZWRUYWcgKyAxID09IEpTVmFsdWU6Ok51bGxUYWcpICYmIChKU1Zh
bHVlOjpOdWxsVGFnICYgMHgxKSwgIiIpOwotICAgIG9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdU
MCk7Ci0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51
bGxUYWcpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKLX0KLQogdm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SXNCb29sZWFuPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgCi0g
ICAgZW1pdExvYWRUYWcodmFsdWUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
VGFnKHZhbHVlLCByZWdUMCk7CiAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCByZWdUMCk7CiAgICAgZW1pdFN0b3JlQm9vbChkc3Qs
IHJlZ1QwKTsKIH0KQEAgLTMxNyw3ICsxODQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1i
ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAotICAgIGVtaXRMb2FkVGFnKHZhbHVlLCByZWdUMCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyh2YWx1ZSwgcmVnVDApOwogICAgIGFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwogICAgIGNvbXBhcmUzMihCZWxvdywgcmVnVDAsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcgKyAxKSwgcmVnVDApOwogICAgIGVtaXRTdG9y
ZUJvb2woZHN0LCByZWdUMCk7CkBAIC0zMzYsNyArMjAzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfY2VsbF93aXRoX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgaW50
IHR5cGUgPSBieXRlY29kZS5tX3R5cGU7CiAKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSwgcmVnVDApOwog
ICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKIAogICAgIGNvbXBh
cmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7CkBAIC0zNTUsNyArMjIyLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRMb2FkKHZhbHVl
LCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qx
LCByZWdUMCk7CiAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwog
CiAgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7CkBAIC0z
NzQsNyArMjQxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsK
IAotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywgcmVnVDEsIHJlZ1QwKTsKIAogICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5v
dENlbGwocmVnVDEpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7CkBA
IC0zOTAsNyArMjU3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5t
X3NyYzsKIAotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDEsIHJlZ1QwKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90Q2VsbChyZWdUMSkpOwogICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmU3ltYm9sKHJlZ1Qw
KTsKQEAgLTQwMSwxMTkgKzI2OCwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcm9wZXJ0eV9r
ZXkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAgICAgZW1pdFN0
b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0
aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZnVuYyA9IGJ5dGVjb2RlLm1fZnVuY3Rpb247Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIG5hbWUgPSBieXRlY29kZS5tX25hbWU7Ci0gICAgZW1pdExvYWRQYXls
b2FkKGZ1bmMsIHJlZ1QxKTsKLSAgICBlbWl0TG9hZChuYW1lLCByZWdUMywgcmVnVDIpOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwot
fQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5vdD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRMb2Fk
VGFnKHNyYywgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcoc3JjLCByZWdU
MCk7CiAKLSAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMsIHJlZ1QxLCByZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RCb29sZWFuKHJlZ1QxLCBJbnZhbGlkR1BSUmVnKSk7CiAgICAgeG9yMzIoVHJ1c3RlZEltbTMy
KDEpLCByZWdUMCk7CiAKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDAsIChkc3QgPT0gc3Jj
KSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSmZhbHNlPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBjb25kID0gYnl0ZWNvZGUu
bV9jb25kaXRpb247Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotCi0gICAgZW1pdExvYWQoY29uZCwg
cmVnVDEsIHJlZ1QwKTsKLQotICAgIEpTVmFsdWVSZWdzIHZhbHVlKHJlZ1QxLCByZWdUMCk7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7
Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAg
IGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwg
ZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX3By
b2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17
Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZCA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uOwotICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldExhYmVsKTsKLQotICAgIGVtaXRMb2FkKGNvbmQsIHJlZ1QxLCByZWdUMCk7Ci0gICAg
Ym9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIEpTVmFs
dWVSZWdzIHZhbHVlKHJlZ1QxLCByZWdUMCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7
Ci0gICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDM7Ci0gICAgYWRkSnVtcChicmFuY2hJZlRydXRo
eSh2bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcU51bGw+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotCi0gICAg
ZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwotCi0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMSk7Ci0KLSAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9G
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3Mo
cmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7
Ci0gICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKLQot
ICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwK
LSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHN0YXRpY19hc3NlcnQoKEpTVmFsdWU6
OlVuZGVmaW5lZFRhZyArIDEgPT0gSlNWYWx1ZTo6TnVsbFRhZykgJiYgKEpTVmFsdWU6Ok51bGxU
YWcgJiAweDEpLCAiIik7Ci0gICAgb3IzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICBh
ZGRKdW1wKGJyYW5jaElmTnVsbChyZWdUMSksIHRhcmdldCk7Ci0KLSAgICBpc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElz
Rm9yZWlnbi5saW5rKHRoaXMpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxsPigpOwotICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLQotICAg
IGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKLQotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDEpOwotCi0gICAgYWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Ci0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAp
OwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1
cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAgd2Fz
Tm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRl
IGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0K
LSAgICBzdGF0aWNfYXNzZXJ0KChKU1ZhbHVlOjpVbmRlZmluZWRUYWcgKyAxID09IEpTVmFsdWU6
Ok51bGxUYWcpICYmIChKU1ZhbHVlOjpOdWxsVGFnICYgMHgxKSwgIiIpOwotICAgIG9yMzIoVHJ1
c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAgYWRkSnVtcChicmFuY2hJZk5vdE51bGwocmVnVDEp
LCB0YXJnZXQpOwotCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci19Ci0KIHZvaWQg
SklUOjplbWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSnVuZGVmaW5lZE9yTnVsbD4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRMb2FkVGFn
KHZhbHVlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyh2YWx1ZSwgcmVn
VDApOwogICAgIHN0YXRpY19hc3NlcnQoKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyArIDEgPT0gSlNW
YWx1ZTo6TnVsbFRhZykgJiYgKEpTVmFsdWU6Ok51bGxUYWcgJiAweDEpLCAiIik7CiAgICAgb3Iz
MihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKICAgICBhZGRKdW1wKGJyYW5jaElmTnVsbChyZWdU
MCksIHRhcmdldCk7CkBAIC01MjUsNyArMzAxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam51bmRl
ZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwogCi0gICAgZW1pdExvYWRUYWcodmFsdWUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyVGFnKHZhbHVlLCByZWdUMCk7CiAgICAgc3RhdGljX2Fzc2VydCgoSlNWYWx1
ZTo6VW5kZWZpbmVkVGFnICsgMSA9PSBKU1ZhbHVlOjpOdWxsVGFnKSAmJiAoSlNWYWx1ZTo6TnVs
bFRhZyAmIDB4MSksICIiKTsKICAgICBvcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwogICAg
IGFkZEp1bXAoYnJhbmNoSWZOb3ROdWxsKHJlZ1QwKSwgdGFyZ2V0KTsKQEAgLTUzNSwxMyArMzEx
LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9wdHIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEplcVB0cj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92
YWx1ZTsKLSAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29uc3RhbnRPcGVyYW5kKGJ5
dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpOwotICAgIEFTU0VSVChzcGVjaWFsUG9pbnRlci5pc0Nl
bGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdExvYWQoc3JjLCByZWdUMSwg
cmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMSwgcmVnVDApOwog
ICAgIEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7Ci0gICAgYWRkSnVtcChi
cmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKHNwZWNpYWxQb2ludGVyLmFzQ2Vs
bCgpKSksIHRhcmdldCk7CisgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50UGF5bG9hZChieXRlY29k
ZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMik7CisgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWws
IHJlZ1QwLCByZWdUMiksIHRhcmdldCk7CiAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwogfQogCkBA
IC01NDksMTMgKzMyNCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
ID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVyID0gZ2V0Q29u
c3RhbnRPcGVyYW5kKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpOwotICAgIEFTU0VSVChzcGVj
aWFsUG9pbnRlci5pc0NlbGwoKSk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCi0gICAgZW1pdExv
YWQoc3JjLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMSwgcmVnVDApOwogICAgIEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7
Ci0gICAgSnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIo
c3BlY2lhbFBvaW50ZXIuYXNDZWxsKCkpKTsKKyAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnRQYXls
b2FkKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJlZ1QyKTsKKyAgICBKdW1wIGVxdWFsID0g
YnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIpOwogICAgIG5vdENlbGwubGluayh0aGlzKTsK
ICAgICBzdG9yZThUb01ldGFkYXRhKFRydXN0ZWRJbW0zMigxKSwgYnl0ZWNvZGUsIE9wSm5lcVB0
cjo6TWV0YWRhdGE6Om9mZnNldE9mSGFzSnVtcGVkKCkpOwogICAgIGFkZEp1bXAoanVtcCgpLCB0
YXJnZXQpOwpAQCAtNTcwLDcgKzM0NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2VxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEg
PSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1f
cmhzOwogCi0gICAgZW1pdExvYWQyKHNyYzEsIHJlZ1QxLCByZWdUMCwgc3JjMiwgcmVnVDMsIHJl
Z1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QxLCByZWdUMCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCByZWdUMywgcmVnVDIpOwogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkNlbGwocmVnVDEpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywg
cmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CkBAIC01OTUsMTMgKzM3
MCwxNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRQogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChi
cmFuY2hJZk5vdFN0cmluZyhyZWdUMikpOwogCiAgICAgLy8gU3RyaW5nIGNhc2UuCi0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIG1fcHJvZmlsZWRDb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVn
VDEpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCByZWdUMSwg
cmVnVDAsIHJlZ1QyKTsKICAgICBzdG9yZVJlc3VsdC5hcHBlbmQoanVtcCgpKTsKIAogICAgIC8v
IEdlbmVyaWMgY2FzZS4KICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikp
OyAvLyBkb3VibGVzCiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZUVxLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKSk7CiAKICAgICBzdG9yZVJlc3VsdC5saW5rKHRoaXMpOwogICAgIGVt
aXRTdG9yZUJvb2woZHN0LCByZXR1cm5WYWx1ZUdQUik7CkBAIC02MTQsNyArMzkxLDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdExvYWQyKHNyYzEsIHJl
Z1QxLCByZWdUMCwgc3JjMiwgcmVnVDMsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYzEsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMy
LCByZWdUMywgcmVnVDIpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MSwgcmVnVDMpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDEpKTsKICAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpM
b3dlc3RUYWcpKSk7CkBAIC02MzQsMTQgKzQxMiwxNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wRXFK
dW1wU2xvdyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBDb21waWxlT3BF
cQogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hJZk5vdFN0cmluZyhyZWdUMikpOwogCiAg
ICAgLy8gU3RyaW5nIGNhc2UuCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3Ry
aW5nRXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMCwgcmVnVDIp
OworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmluZ0VxLCByZWdUMSwgcmVnVDAsIHJlZ1QyKTsKICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hUZXN0MzIodHlwZSA9PSBDb21waWxlT3BFcVR5cGU6OkVxID8gTm9uWmVy
byA6IFplcm8sIHJldHVyblZhbHVlR1BSKSwganVtcFRhcmdldCk7CiAgICAgZG9uZS5hcHBlbmQo
anVtcCgpKTsKIAogICAgIC8vIEdlbmVyaWMgY2FzZS4KICAgICBnZW5lcmljQ2FzZS5hcHBlbmQo
Z2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCiAgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlz
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgbV9wcm9maWxlZENvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKHR5cGUgPT0gQ29tcGlsZU9wRXFUeXBlOjpFcSA/IE5vblplcm8gOiBa
ZXJvLCByZXR1cm5WYWx1ZUdQUiksIGp1bXBUYXJnZXQpOwogCiAgICAgZG9uZS5saW5rKHRoaXMp
OwpAQCAtNjYxLDcgKzQ0MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX25lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0
ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsK
IAotICAgIGVtaXRMb2FkMihzcmMxLCByZWdUMSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCByZWdUMik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMSwgcmVnVDApOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZDZWxsKHJlZ1QxKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQmVsb3csIHJlZ1Qx
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwpAQCAtNjg2LDEzICs0NjcsMTUg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2UKICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNo
SWZOb3RTdHJpbmcocmVnVDIpKTsKIAogICAgIC8vIFN0cmluZyBjYXNlLgotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgcmVnVDEsIHJlZ1Qw
LCByZWdUMik7CiAgICAgc3RvcmVSZXN1bHQuYXBwZW5kKGp1bXAoKSk7CiAKICAgICAvLyBHZW5l
cmljIGNhc2UuCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8g
ZG91YmxlcwogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlRXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAg
ICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNv
bXBhcmVFcSwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMikpOwogCiAgICAgc3RvcmVSZXN1bHQubGluayh0aGlzKTsKICAgICB4b3IzMihU
cnVzdGVkSW1tMzIoMHgxKSwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtNzA2LDcgKzQ4OSw4IEBAIHZv
aWQgSklUOjplbWl0X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0TG9hZDIoc3JjMSwg
cmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjMSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YzIsIHJlZ1QzLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QxLCByZWdUMykpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMSkpOwogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKEJlbG93LCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
Okxvd2VzdFRhZykpKTsKQEAgLTcyOSw3ICs1MTMsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3Ry
aWN0RXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMy
ID0gYnl0ZWNvZGUubV9yaHM7CiAKLSAgICBlbWl0TG9hZDIoc3JjMSwgcmVnVDEsIHJlZ1QwLCBz
cmMyLCByZWdUMywgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVn
VDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIHJlZ1QzLCByZWdU
Mik7CiAKICAgICAvLyBCYWlsIGlmIHRoZSB0YWdzIGRpZmZlciwgb3IgYXJlIGRvdWJsZS4KICAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7CkBAIC03Njks
MjQgKzU1NCwyNSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBi
eXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhz
OwogCi0gICAgZW1pdExvYWQyKHNyYzEsIHJlZ1QxLCByZWdUMCwgc3JjMiwgcmVnVDMsIHJlZ1Qy
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIGpzUmVnVDEwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGpzUmVnVDMyKTsKIAogICAgIC8vIEJhaWwgaWYgdGhl
IHRhZ3MgZGlmZmVyLCBvciBhcmUgZG91YmxlLgotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywg
cmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTm90RXF1YWwsIGpzUmVnVDEwLnRhZ0dQUigpLCBqc1JlZ1QzMi50YWdHUFIo
KSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEJlbG93LCBqc1JlZ1QxMC50YWdHUFIoKSwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKIAogICAgIC8vIEp1bXAgdG8gYSBz
bG93IGNhc2UgaWYgYm90aCBhcmUgc3RyaW5ncyBvciBzeW1ib2xzIChub24gb2JqZWN0KS4KLSAg
ICBKdW1wIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwotICAgIEp1bXAgZmlyc3RJ
c09iamVjdCA9IGJyYW5jaElmT2JqZWN0KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdE9iamVjdChyZWdUMikpOworICAgIEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChq
c1JlZ1QxMCk7CisgICAgSnVtcCBmaXJzdElzT2JqZWN0ID0gYnJhbmNoSWZPYmplY3QoanNSZWdU
MTAucGF5bG9hZEdQUigpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChqc1Jl
Z1QzMi5wYXlsb2FkR1BSKCkpKTsKICAgICBub3RDZWxsLmxpbmsodGhpcyk7CiAgICAgZmlyc3RJ
c09iamVjdC5saW5rKHRoaXMpOwogCiAgICAgLy8gU2ltcGx5IGNvbXBhcmUgdGhlIHBheWxvYWRz
LgogICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lPE9wLCBPcEpzdHJpY3RlcT46OnZhbHVl
KQotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDIpLCB0YXJnZXQp
OworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCks
IGpzUmVnVDMyLnBheWxvYWRHUFIoKSksIHRhcmdldCk7CiAgICAgZWxzZQotICAgICAgICBhZGRK
dW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIpLCB0YXJnZXQpOworICAgICAgICBh
ZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIGpzUmVnVDMy
LnBheWxvYWRHUFIoKSksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pzdHJpY3Rl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtODA1LDcgKzU5MSw4
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIG1fcHJvZmlsZWRDb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVnVDQsIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1w
U2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
CiB9CiAKQEAgLTgxNSw5MSArNjAyLDE4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmlj
dGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgbG9hZEds
b2JhbE9iamVjdChyZWdUNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3Ry
aWN0RXEsIHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRl
Y29kZS5tX29wZXJhbmQ7Ci0KLSAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7Ci0gICAg
SnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7Ci0KLSAgICBKdW1wIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDEpOwotICAg
IEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZWdUMik7Ci0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAg
ICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIGlzSW1tZWRpYXRlLmxpbmso
dGhpcyk7Ci0KLSAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6TnVsbFRhZyksIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDEpOwotICAgIG9yMzIocmVnVDIsIHJl
Z1QxKTsKLQotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLQotICAgIGVtaXRTdG9yZUJvb2woZHN0LCBy
ZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5k
OwotCi0gICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlh
dGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICBKdW1wIHdhc05vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9wcm9m
aWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAg
IGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgSnVtcCB3YXNO
b3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotCi0g
ICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxU
YWcpLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QxKTsKLSAgICBhbmQzMihyZWdUMiwgcmVnVDEp
OwotCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotCi0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1Qx
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFRocm93PigpOwotICAgIEFTU0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7Ci0g
ICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BF
bnRyeUZyYW1lKTsKLSAgICBlbWl0TG9hZChieXRlY29kZS5tX3ZhbHVlLCByZWdUMSwgcmVnVDAp
OwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBtX3By
b2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSk7Ci0gICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKLX0KLQogdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4o
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVtaXRMb2FkKHNyYywg
cmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDEsIHJl
Z1QwKTsKIAogICAgIEp1bXAgaXNJbnQzMiA9IGJyYW5jaElmSW50MzIocmVnVDEpOwogICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpMb3dlc3RUYWcpKSk7CkBAIC05MTcsNyArNjMxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
dG9fbnVtZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZp
cnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAgICAgSlNWYWx1ZVJlZ3Mg
YXJndW1lbnRWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKIAotICAgIGVtaXRMb2FkKHNyYywgcmVn
VDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDEsIHJlZ1Qw
KTsKIAogICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdEhlYXBCaWdJbnQocmVnVDApKTsKQEAgLTkzOCw3ICs2NTIs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAotICAgIGVt
aXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YywgcmVnVDEsIHJlZ1QwKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdU
MSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CkBAIC05NTMs
NyArNjY3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAK
LSAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmMsIHJlZ1QxLCByZWdUMCk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENl
bGwocmVnVDEpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwpA
QCAtMTAyNSw3NCArNzM5LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpOwogICAgIFZp
cnR1YWxSZWdpc3RlciBjdXJyZW50U2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIGVtaXRM
b2FkUGF5bG9hZChjdXJyZW50U2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyUGF5bG9hZChjdXJyZW50U2NvcGUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwogICAgIGVtaXRTdG9yZUNlbGwo
Ynl0ZWNvZGUubV9kc3QsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2lt
bShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoSW1tPigpOwotICAgIHNpemVf
dCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwotICAgIHVuc2lnbmVkIGRlZmF1
bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9kZWZh
dWx0T2Zmc2V0KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9z
Y3J1dGluZWU7Ci0KLSAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0
aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2lt
cGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9wcm9maWxlZENvZGVCbG9jay0+dW5saW5r
ZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKLSAgICBtX3N3aXRjaGVz
LmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0
T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwotICAgIGxpbmtlZFRhYmxlLmVuc3Vy
ZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwotCi0gICAgZW1pdExvYWQoc2NydXRpbmVlLCByZWdU
MSwgcmVnVDApOwotICAgIGF1dG8gbm90SW50MzIgPSBicmFuY2hJZk5vdEludDMyKHJlZ1QxKTsK
LSAgICBzdWIzMihJbW0zMih1bmxpbmtlZFRhYmxlLm1fbWluKSwgcmVnVDApOwotCi0gICAgYWRk
SnVtcChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QwLCBJbW0zMihsaW5rZWRUYWJsZS5tX2N0
aU9mZnNldHMuc2l6ZSgpKSksIGRlZmF1bHRPZmZzZXQpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihsaW5rZWRUYWJsZS5tX2N0aU9mZnNldHMuZGF0YSgpKSwgcmVnVDEpOwotICAgIGxvYWRQdHIo
QmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgU2NhbGVQdHIpLCByZWdUMSk7Ci0gICAgZmFySnVtcChy
ZWdUMSwgTm9QdHJUYWcpOwotCi0gICAgbm90SW50MzIubGluayh0aGlzKTsKLSAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5
cGUsICZ2bSgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJsZUluZGV4LCB1bmxpbmtl
ZFRhYmxlLm1fbWluKTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7Ci19
Ci0KLXZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BTd2l0Y2hDaGFyPigpOwotICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUu
bV90YWJsZUluZGV4OwotICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWU7Ci0KLSAgICAvLyBjcmVh
dGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2gg
c3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxpbmtlZFRh
YmxlID0gbV9wcm9maWxlZENvZGVCbG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCk7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fc3dpdGNoSnVtcFRh
Ymxlc1t0YWJsZUluZGV4XTsKLSAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFi
bGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNo
YXJhY3RlcikpOwotICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUp
OwotCi0gICAgZW1pdExvYWQoc2NydXRpbmVlLCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgbV9wcm9maWxlZENv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxl
SW5kZXgsIHVubGlua2VkVGFibGUubV9taW4pOwotICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIs
IE5vUHRyVGFnKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoU3RyaW5nPigpOwotICAgIHNpemVfdCB0YWJs
ZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OwotICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZz
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9kZWZhdWx0T2Zm
c2V0KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGlu
ZWU7Ci0KLSAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywg
dHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVt
cFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9wcm9maWxlZENvZGVCbG9jay0+dW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5r
ZWRUYWJsZSA9IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKLSAgICBtX3N3
aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUluZGV4LCBk
ZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmluZykpOwotICAgIGxpbmtlZFRhYmxlLmVu
c3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwotCi0gICAgZW1pdExvYWQoc2NydXRpbmVlLCBy
ZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0
aFVua25vd25LZXlUeXBlLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgdGFibGVJbmRleCk7Ci0gICAgZmFySnVtcChyZXR1cm5W
YWx1ZUdQUiwgTm9QdHJUYWcpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGVtaXRFbnRlck9wdGltaXph
dGlvbkNoZWNrKCk7CkBAIC0xMTAwLDcgKzc1MSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgLy8gRXZlbiB0aG91
Z2ggSklUIGNvZGUgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQK
ICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vz
c2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcg
R0MgcHJlc3N1cmUuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gQ29kZUJsb2NrOjpsbGludEJhc2Vs
aW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGkgPCBtX3Byb2ZpbGVkQ29k
ZUJsb2NrLT5udW1WYXJzKCk7ICsraSkKKyAgICBzaXplX3QgY291bnQgPSBtX3VubGlua2VkQ29k
ZUJsb2NrLT5udW1WYXJzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IENvZGVCbG9jazo6bGxpbnRC
YXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBpIDwgY291bnQ7ICsr
aSkKICAgICAgICAgZW1pdFN0b3JlKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBqc1VuZGVm
aW5lZCgpKTsKIAogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW50ZXIpOwpAQCAtMTExNiwxNjQgKzc2OCwxMyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6
ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRl
VGhpcz4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmls
ZWRDb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2Nh
bGxlZTsKLSAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1l
dGFkYXRhLm1fY2FjaGVkQ2FsbGVlOwotICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7
Ci0gICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwotICAgIFJlZ2lzdGVySUQgcmVz
dWx0UmVnID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKLSAg
ICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgY2FjaGVk
RnVuY3Rpb25SZWcgPSByZWdUNDsKLSAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMzsK
LQotICAgIGVtaXRMb2FkUGF5bG9hZChjYWxsZWUsIGNhbGxlZVJlZyk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RGdW5jdGlvbihjYWxsZWVSZWcpKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
Y2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCBy
YXJlRGF0YVJlZyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByYXJlRGF0
YVJlZywgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSkpOwotICAgIGxvYWQz
MihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFs
bG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZVdpdGhQcm90b3R5cGU6
Om9mZnNldE9mQWxsb2NhdG9yKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIGFsbG9jYXRv
clJlZyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRh
OjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZVdpdGhQcm90b3R5cGU6Om9mZnNldE9mU3RydWN0dXJlKCkgLSBKU0Z1bmN0aW9uOjpyYXJl
RGF0YVRhZyksIHN0cnVjdHVyZVJlZyk7Ci0KLSAgICBsb2FkUHRyKGNhY2hlZEZ1bmN0aW9uLCBj
YWNoZWRGdW5jdGlvblJlZyk7Ci0gICAgSnVtcCBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzID0gYnJh
bmNoUHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlvblJlZywgVHJ1c3RlZEltbVB0cihKU0NlbGw6OnNl
ZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihO
b3RFcXVhbCwgY2FsbGVlUmVnLCBjYWNoZWRGdW5jdGlvblJlZykpOwotICAgIGhhc1NlZW5NdWx0
aXBsZUNhbGxlZXMubGluayh0aGlzKTsKLQotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICBh
dXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgZW1pdEFsbG9jYXRl
SlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvclJl
Zywgc3RydWN0dXJlUmVnLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Ci0gICAg
bG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZz
ZXQoKSksIHNjcmF0Y2hSZWcpOwotICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1
bHRSZWcsIHNjcmF0Y2hSZWcpOwotICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgZW1p
dFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVnKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9j
ayk7Ci0gICAgU3RydWN0dXJlSUQqIGNhY2hlZFN0cnVjdHVyZUlEID0gJm1ldGFkYXRhLm1fY2Fj
aGVkU3RydWN0dXJlSUQ7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdpc3RlciA9IGJ5dGVj
b2RlLm1fc3JjRHN0OwotCi0gICAgZW1pdExvYWQodGhpc1JlZ2lzdGVyLCByZWdUMywgcmVnVDIp
OwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QzKSk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QyLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsK
LSAgICBsb2FkMzIoY2FjaGVkU3RydWN0dXJlSUQsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMikpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9v
cF9jaGVja190ZHooY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6PigpOwot
ICAgIGVtaXRMb2FkVGFnKGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyLCByZWdUMCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyhieXRlY29kZS5tX3RhcmdldFZpcnR1YWxS
ZWdpc3RlciwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwotICAgIFR5cGVMb2NhdGlvbiogY2FjaGVk
VHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXI7Ci0K
LSAgICAvLyBMb2FkIHBheWxvYWQgaW4gVDAuIExvYWQgdGFnIGluIFQzLgotICAgIGVtaXRMb2Fk
UGF5bG9hZCh2YWx1ZVRvUHJvZmlsZSwgcmVnVDApOwotICAgIGVtaXRMb2FkVGFnKHZhbHVlVG9Q
cm9maWxlLCByZWdUMyk7Ci0KLSAgICBKdW1wTGlzdCBqdW1wVG9FbmQ7Ci0KLSAgICBqdW1wVG9F
bmQuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDMpKTsKLQotICAgIC8vIENvbXBpbGUgaW4gYSBw
cmVkaWN0aXZlIHR5cGUgY2hlY2ssIGlmIHBvc3NpYmxlLCB0byBzZWUgaWYgd2UgY2FuIHNraXAg
d3JpdGluZyB0byB0aGUgbG9nLgotICAgIC8vIFRoZXNlIHR5cGVjaGVja3MgYXJlIGlubGluZWQg
dG8gbWF0Y2ggdGhvc2Ugb2YgdGhlIDMyLWJpdCBKU1ZhbHVlIHR5cGUgY2hlY2tzLgotICAgIGlm
IChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVVbmRlZmluZWQpCi0g
ICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZVbmRlZmluZWQocmVnVDMpKTsKLSAgICBl
bHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVOdWxsKQot
ICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmTnVsbChyZWdUMykpOwotICAgIGVsc2Ug
aWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZUJvb2xlYW4pCi0g
ICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZCb29sZWFuKHJlZ1QzLCBJbnZhbGlkR1BS
UmVnKSk7Ci0gICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9
PSBUeXBlQW55SW50KQotICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmSW50MzIocmVn
VDMpKTsKLSAgICBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09
IFR5cGVOdW1iZXIpIHsKLSAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZk51bWJlcihK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDApLCByZWdUMSkpOwotICAgIH0gZWxzZSBpZiAoY2FjaGVk
VHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlU3RyaW5nKSB7Ci0gICAgICAgIEp1
bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QzKTsKLSAgICAgICAganVtcFRvRW5k
LmFwcGVuZChicmFuY2hJZlN0cmluZyhyZWdUMCkpOwotICAgICAgICBpc05vdENlbGwubGluayh0
aGlzKTsKLSAgICB9Ci0KLSAgICAvLyBMb2FkIHRoZSB0eXBlIHByb2ZpbGluZyBsb2cgaW50byBU
Mi4KLSAgICBUeXBlUHJvZmlsZXJMb2cqIGNhY2hlZFR5cGVQcm9maWxlckxvZyA9IG1fdm0tPnR5
cGVQcm9maWxlckxvZygpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlUHJvZmls
ZXJMb2cpLCByZWdUMik7Ci0KLSAgICAvLyBMb2FkIHRoZSBuZXh0IGxvZyBlbnRyeSBpbnRvIFQx
LgotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgVHlwZVByb2ZpbGVyTG9nOjpjdXJyZW50TG9n
RW50cnlPZmZzZXQoKSksIHJlZ1QxKTsKLQotICAgIC8vIFN0b3JlIHRoZSBKU1ZhbHVlIG9udG8g
dGhlIGxvZyBlbnRyeS4KLSAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBUeXBlUHJv
ZmlsZXJMb2c6OkxvZ0VudHJ5Ojp2YWx1ZU9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgc3RvcmUzMihyZWdUMywgQWRkcmVzcyhyZWdU
MSwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6dmFsdWVPZmZzZXQoKSArIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0KLSAgICAvLyBTdG9yZSB0aGUgc3RydWN0
dXJlSUQgb2YgdGhlIGNlbGwgaWYgYXJndW1lbnQgaXMgYSBjZWxsLCBvdGhlcndpc2UsIHN0b3Jl
IDAgb24gdGhlIGxvZyBlbnRyeS4KLSAgICBKdW1wIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDMpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMCk7Ci0gICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhyZWdUMSwgVHlwZVBy
b2ZpbGVyTG9nOjpMb2dFbnRyeTo6c3RydWN0dXJlSURPZmZzZXQoKSkpOwotICAgIEp1bXAgc2tp
cE5vdENlbGwgPSBqdW1wKCk7Ci0gICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgIHN0b3JlMzIo
VHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKHJlZ1QxLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7Ci0gICAgc2tpcE5vdENlbGwubGluayh0aGlzKTsKLQot
ICAgIC8vIFN0b3JlIHRoZSB0eXBlTG9jYXRpb24gb24gdGhlIGxvZyBlbnRyeS4KLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoY2FjaGVkVHlwZUxvY2F0aW9uKSwgcmVnVDApOwotICAgIHN0b3JlMzIo
cmVnVDAsIEFkZHJlc3MocmVnVDEsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OmxvY2F0aW9u
T2Zmc2V0KCkpKTsKLQotICAgIC8vIEluY3JlbWVudCB0aGUgY3VycmVudCBsb2cgZW50cnkuCi0g
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeSkp
LCByZWdUMSk7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMiwgVHlwZVByb2ZpbGVy
TG9nOjpjdXJyZW50TG9nRW50cnlPZmZzZXQoKSkpOwotICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJh
bmNoUHRyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlUHJvZmlsZXJM
b2ctPmxvZ0VuZFB0cigpKSkpOwotICAgIC8vIENsZWFyIHRoZSBsb2cgaWYgd2UncmUgYXQgdGhl
IGVuZCBvZiB0aGUgbG9nLgotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvblByb2Nlc3NUeXBlUHJvZmlsZXJMb2csICZ2bSgpKTsKLQotICAgIGp1bXBUb0VuZC5saW5r
KHRoaXMpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9n
dWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBSRUxFQVNF
X0FTU0VSVCh2bSgpLnNoYWRvd0NoaWNrZW4oKSk7Ci0gICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7
Ci0gICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0g
cmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblBy
b2xvZ3VlPigpOwotICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBHUFJS
ZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1l
bnQgcmVnaXN0ZXIuCi0gICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJl
U2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBz
Y3JhdGNoMlJlZyk7Ci0KLSAgICBzY3JhdGNoMVJlZyA9IHJlZ1Q0OwotICAgIGVtaXRMb2FkUGF5
bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblByb2xv
Z3VlUGFja2V0KHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHJlZ1QzKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLnNoYWRvd0No
aWNrZW4oKSk7Ci0gICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7Ci0gICAgc3RhdGljX2Fzc2VydChu
b25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUg
cHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7Ci0gICAgR1BSUmVnIHNo
YWRvd1BhY2tldFJlZyA9IHJlZ1QwOwotICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQ
UjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KLSAgICBHUFJSZWcg
c2NyYXRjaDJSZWcgPSByZWdUMjsKLSAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KHZtKCks
IHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKLSAgICBlbWl0TG9h
ZFBheWxvYWQoYnl0ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0TG9hZFRhZyhi
eXRlY29kZS5tX3RoaXNWYWx1ZSwgcmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHRoaXNSZWdzKHJl
Z1QxLCByZWdUMik7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1Qz
KTsKLSAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNS
ZWdzLCByZWdUMywgVHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrKSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlSW5kZXgpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRp
ZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcAppbmRleCA5NTc2OTViMzBlOTM5OWJiYTBlMzBmMmVmZjQ5MGQz
MGZiNjdjYjVmLi5mMDJmNGFhNTlkOTZhZTE1NTVlYTMyZWMxYTJmNTE3MDVmNGIxZTg2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAt
Nzc1LDE0ICs3NzUsMTIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6OnNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9wcmVwYXJlQ2FsbEcKIH0KICNlbmRpZiAvLyBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0KIHZvaWQgSklU
OjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChieXRlY29k
ZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCBy
ZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUubV9hY2Nl
c3NvciwgcmVnVDEpOwogICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywg
cmVnVDEpOwogfQpAQCAtNzkwLDkgKzc4OCw5IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0
ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dFNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X2Jhc2UsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChieXRlY29k
ZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCBy
ZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUubV9hY2Nl
c3NvciwgcmVnVDEpOwogICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDIpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgcmVnVDIsIHJlZ1QwLCBtX3VubGlua2VkQ29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywg
cmVnVDEpOwogfQpAQCAtODAwLDEwICs3OTgsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Nl
dHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dEdldHRlclNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
UGF5bG9hZChieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9
IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fZ2V0dGVyLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3NldHRlciwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5
dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxv
YWQoYnl0ZWNvZGUubV9zZXR0ZXIsIHJlZ1QyKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Qz
KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDMsIHJl
Z1QwLCBtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOwogfQpAQCAtODExLDI2ICs4MDksNDAg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeVZhbD4oKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEpOworCisg
ICAgdXNpbmcgU2xvd09wZXJhdGlvbiA9IGRlY2x0eXBlKG9wZXJhdGlvblB1dEdldHRlckJ5VmFs
KTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdSUCA9IHByZWZlcnJlZEFyZ3Vt
ZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BS
ID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICBjb25zdGV4
cHIgSlNWYWx1ZVJlZ3MgcHJvcGVydHlKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3Bl
cmF0aW9uLCAyPigpOworICAgIC8vIEF0dHJpYnV0ZXMgaW4gYXJndW1lbnQgMworICAgIGNvbnN0
ZXhwciBHUFJSZWcgc2V0dGVyR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlv
biwgND4oKTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1f
YmFzZSwgYmFzZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3By
b3BlcnR5LCBwcm9wZXJ0eUpTUik7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUu
bV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nl
c3NvciwgcmVnVDIpOwotICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwgcmVnVDEsIGF0dHJp
YnV0ZXMsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChieXRlY29k
ZS5tX2FjY2Vzc29yLCBzZXR0ZXJHUFIpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2Jq
ZWN0R1JQKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBnbG9i
YWxPYmplY3RHUlAsIGJhc2VHUFIsIHByb3BlcnR5SlNSLCBhdHRyaWJ1dGVzLCBzZXR0ZXJHUFIp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2FjY2Vzc29yLCByZWdUMik7Ci0gICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgcmVnVDMsIHJlZ1QwLCBy
ZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwotfQogCi0jZW5kaWYKKyAgICB1c2luZyBTbG93T3Bl
cmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwpOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgZ2xvYmFsT2JqZWN0R1JQID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJh
dGlvbiwgMD4oKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGJhc2VHUFIgPSBwcmVmZXJyZWRBcmd1
bWVudEdQUjxTbG93T3BlcmF0aW9uLCAxPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBw
cm9wZXJ0eUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDI+KCk7Cisg
ICAgLy8gQXR0cmlidXRlcyBpbiBhcmd1bWVudCAzCisgICAgY29uc3RleHByIEdQUlJlZyBzZXR0
ZXJHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCA0PigpOworCisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUubV9iYXNlLCBiYXNlR1BSKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHByb3BlcnR5
SlNSKTsKKyAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUubV9hY2Nlc3Nvciwgc2V0
dGVyR1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdSUCk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgZ2xvYmFsT2JqZWN0R1JQLCBiYXNl
R1BSLCBwcm9wZXJ0eUpTUiwgYXR0cmlidXRlcywgc2V0dGVyR1BSKTsKK30KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CkBAIC0xOTU4LDEzMCArMTk3MCw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJp
dmF0ZV9icmFuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWCiAgICAg
ZW1pdEhhc1ByaXZhdGVTbG93KGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVj
b2RlLm1fYnJhbmQsIEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiB9CiAKLSNpZiBVU0Uo
SlNWQUxVRTY0KQotCi12b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cywgdW5zaWduZWQgZGVwdGgpCi17Ci0gICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29w
ZSwgcmVnVDApOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQotICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVn
VDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLX0KLQotCi0jaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQotdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwotICAgIFJlc29sdmVU
eXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29k
ZUJsb2NrKS5tX3Jlc29sdmVUeXBlOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwot
Ci0gICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOwotCi0gICAgSnVtcExpc3Qg
c2xvd0Nhc2U7Ci0KLSAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MsIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBJbnZhbGlkR1BS
UmVnKSB7Ci0gICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGlmIChnbG9iYWxPYmplY3RHUFIgPT0gSW52YWxpZEdQUlJlZykg
ewotICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0gcmVnVDQ7Ci0gICAgICAgICAgICBsb2Fk
R2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQUik7Ci0gICAgICAgIH0KLSAgICAgICAgbG9hZFB0
cihBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0
LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0
T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7Ci0gICAgfTsKLQotICAg
IGF1dG8gZW1pdFJlc29sdmVDbG9zdXJlID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKSB7Ci0gICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpOwotICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3Bl
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZMb2NhbFNjb3BlRGVwdGgoKSwgcmVnVDEpOwotCi0gICAgICAg
IEFTU0VSVChzY29wZUdQUiA9PSByZWdUMCk7Ci0gICAgICAgIExhYmVsIGxvb3AgPSBsYWJlbCgp
OwotICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDEpOwotICAgICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDAp
OwotICAgICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICAgICAganVtcCgp
LmxpbmtUbyhsb29wLCB0aGlzKTsKLSAgICAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIH07Ci0K
LSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewotICAg
ICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6
Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0g
ICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKCkgbG9hZHMg
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS4KLSAgICAgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qo
cmVnVDApOwotICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGxvYWQzMkZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkdsb2JhbExl
eGljYWxCaW5kaW5nRXBvY2goKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5k
KGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0dsb2JhbE9iamVjdDo6b2Zmc2V0
T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEdsb2JhbFZhcjoKLSAgICAgICAgY2FzZSBH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICBjYXNlIEdsb2JhbExleGlj
YWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKLSAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2so
KSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpIGZvciBHbG9iYWxWYXIqLAotICAgICAg
ICAgICAgLy8gYW5kIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbExleGljYWxFbnZp
cm9ubWVudCgpIGZvciBHbG9iYWxMZXhpY2FsVmFyKi4KLSAgICAgICAgICAgIGxvYWRHbG9iYWxP
YmplY3QocmVnVDApOwotICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGlmIChyZXNv
bHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25t
ZW50KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3M6Ci0gICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIER5
bmFtaWM6Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBN
b2R1bGVWYXI6Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgICAgICBjYXNl
IFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGlm
IChwcm9maWxlZFJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgCi0gICAgICAgIGxvYWRQdHJGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZMZXhp
Y2FsRW52aXJvbm1lbnQoKSwgcmVnVDApOwotICAgIGVsc2UgewotICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Ci0gICAgICAgIGlmIChwcm9maWxlZFJlc29s
dmVUeXBlID09IENsb3N1cmVWYXIgfHwgcHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgIGVtaXRDb2RlKHByb2ZpbGVkUmVz
b2x2ZVR5cGUpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKLQotICAgICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5k
OwotICAgICAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29w
ZTo6TWV0YWRhdGE6Om9mZnNldE9mUmVzb2x2ZVR5cGUoKSwgcmVnVDEpOwotCi0gICAgICAgICAg
ICBhdXRvIGVtaXRDYXNlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewotICAgICAg
ICAgICAgICAgIEp1bXAgbm90Q2FzZSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3Rl
ZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5
cGUpOwotICAgICAgICAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAg
ICAgICAgICBub3RDYXNlLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAg
ICBlbWl0Q2FzZShHbG9iYWxWYXIpOwotICAgICAgICAgICAgZW1pdENhc2UoR2xvYmFsUHJvcGVy
dHkpOwotICAgICAgICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcik7Ci0gICAgICAgICAg
ICBlbWl0Q2FzZShHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgICAg
IGVtaXRDYXNlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAg
ICAgICBlbWl0Q2FzZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0g
ICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICAgICAgc2tpcFRv
RW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZSk7Ci0KLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19Ci0KLSNlbHNlCiB2
b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BSZXNvbHZlU2NvcGU+KCk7CkBAIC0yMDk0LDIxICsxOTgyLDIwIEBAIHZvaWQgSklUOjpl
bWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChieXRlY29kZU9mZnNldCkgPT0gbV9ieXRlY29k
ZUluZGV4KTsKICAgICBBU1NFUlQobV91bmxpbmtlZENvZGVCbG9jay0+aW5zdHJ1Y3Rpb25BdCht
X2J5dGVjb2RlSW5kZXgpID09IGN1cnJlbnRJbnN0cnVjdGlvbik7CiAKLSAgICAvLyBJZiB3ZSBw
cm9maWxlIGNlcnRhaW4gcmVzb2x2ZSB0eXBlcywgd2UncmUgZ2F1cmFudGVlZCBhbGwgbGlua2Vk
IGNvZGUgd2lsbCBoYXZlIHRoZSBzYW1lCisgICAgLy8gSWYgd2UgcHJvZmlsZSBjZXJ0YWluIHJl
c29sdmUgdHlwZXMsIHdlJ3JlIGd1YXJhbnRlZWQgYWxsIGxpbmtlZCBjb2RlIHdpbGwgaGF2ZSB0
aGUgc2FtZQogICAgIC8vIHJlc29sdmUgdHlwZS4KIAogICAgIGlmIChwcm9maWxlZFJlc29sdmVU
eXBlID09IE1vZHVsZVZhcikgCi0gICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZMZXhpY2FsRW52aXJvbm1lbnQoKSwg
cmVnVDApOworICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVT
Y29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTGV4aWNhbEVudmlyb25tZW50KCksIHJldHVyblZhbHVl
R1BSKTsKICAgICBlbHNlIHsKICAgICAgICAgdWludDMyX3QgbWV0YWRhdGFPZmZzZXQgPSBtX3Vu
bGlua2VkQ29kZUJsb2NrLT5tZXRhZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29k
ZSk7CiAKICAgICAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9IHJlZ1QyOwogICAg
ICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDA7Ci0gICAgICAgIGNvbnN0ZXhw
ciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsKKyAgICAgICAgY29uc3RleHByIEdQ
UlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1QzOwogCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
clBheWxvYWQoc2NvcGUsIHNjb3BlR1BSKTsKICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMiht
ZXRhZGF0YU9mZnNldCksIHNfbWV0YWRhdGFHUFIsIG1ldGFkYXRhR1BSKTsKLQogICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihieXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIAog
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNvZGU7CkBAIC0y
MTM0LDcgKzIwMjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGVtaXROYWtlZE5lYXJDYWxs
KGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKICAgICB9CiAKLSAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgYm94Q2VsbChyZXR1cm5WYWx1ZUdQUiwgcmV0dXJuVmFs
dWVKU1IpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUpTUik7
CiB9CiAKIHRlbXBsYXRlIDxSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlPgpAQCAtMjE1
MCw4ICsyMDM4LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mIHZtKQogICAgIHVzaW5nIE1ldGFkYXRh
ID0gT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRh
dGFHUFIgPSByZWdUMjsgLy8gaW5jb21pbmcKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BS
ID0gcmVnVDA7IC8vIGluY29taW5nCi0gICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNl
dEdQUiA9IHJlZ1Q1OyAvLyBpbmNvbWluZyAtIHBhc3MgdGhydSB0byBzbG93IHBhdGguCisgICAg
Y29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1QzOyAvLyBpbmNvbWluZyAt
IHBhc3MgdGhydSB0byBzbG93IHBhdGguCisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BS
ID0gcmVnVDU7IC8vIGxvY2FsIHRlbXBvcmFyeQogICAgIFVOVVNFRF9QQVJBTShieXRlY29kZU9m
ZnNldEdQUik7CisgICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAocmV0dXJuVmFsdWVHUFIsIG1l
dGFkYXRhR1BSLCBieXRlY29kZU9mZnNldEdQUiwgc2NyYXRjaEdQUikpOworICAgIHN0YXRpY19h
c3NlcnQoc2NvcGVHUFIgPT0gcmV0dXJuVmFsdWVHUFIpOyAvLyBlbWl0UmVzb2x2ZUNsb3N1cmUg
YXNzdW1lcyB0aGlzCiAKICAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCkBAIC0yMTYxLDIz
ICsyMDUyLDIzIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpn
ZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0mIHZtKQogICAgICAgICBpZiAoIW5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoZ2xvYmFs
T2JqZWN0R1BSID09IEludmFsaWRHUFJSZWcpIHsKLSAgICAgICAgICAgIGdsb2JhbE9iamVjdEdQ
UiA9IHJlZ1Q0OwotICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RH
UFIpOworICAgICAgICAgICAgZ2xvYmFsT2JqZWN0R1BSID0gc2NyYXRjaEdQUjsKKyAgICAgICAg
ICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7CiAgICAg
ICAgIH0KLSAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVD
VF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJl
Z1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4KEVxdWFsLCBBZGRyZXNz
KHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJ
bnZhbGlkYXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhnbG9iYWxPYmplY3RH
UFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rpb25XYXRjaHBv
aW50KSksIHNjcmF0Y2hHUFIpOworICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDgo
RXF1YWwsIEFkZHJlc3Moc2NyYXRjaEdQUiwgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgp
KSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CiAgICAgfTsKIAogICAgIGF1dG8gZW1p
dFJlc29sdmVDbG9zdXJlID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CiAg
ICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAg
ICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkxv
Y2FsU2NvcGVEZXB0aCgpKSwgcmVnVDEpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChzY29wZUdQ
UiA9PSByZWdUMCk7CisgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0
YWRhdGE6Om9mZnNldE9mTG9jYWxTY29wZURlcHRoKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoc2NvcGVHUFIgPT0gcmV0dXJuVmFsdWVHUFIpOwogCiAgICAgICAgIExh
YmVsIGxvb3AgPSBqaXQubGFiZWwoKTsKLSAgICAgICAgSnVtcCBkb25lID0gaml0LmJyYW5jaFRl
c3QzMihaZXJvLCByZWdUMSk7Ci0gICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
U2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgICAgICBqaXQuc3ViMzIoVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUMSk7CisgICAgICAgIEp1bXAgZG9uZSA9IGppdC5icmFuY2hUZXN0MzIo
WmVybywgc2NyYXRjaEdQUik7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmV0dXJuVmFs
dWVHUFIsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmV0dXJuVmFsdWVHUFIpOworICAgICAg
ICBqaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgaml0Lmp1
bXAoKS5saW5rVG8obG9vcCwgJmppdCk7CiAgICAgICAgIGRvbmUubGluaygmaml0KTsKICAgICB9
OwpAQCAtMjE4NywxMSArMjA3OCwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZNJiB2bSkKICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIC8vIEpTU2NvcGU6OmNvbnN0YW50U2NvcGVG
b3JDb2RlQmxvY2soKSBsb2FkcyBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLgotICAgICAgICAg
ICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
Myk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9m
ZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBkb1ZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwotICAg
ICAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0
T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSk7Ci0gICAgICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0dsb2Jh
bE9iamVjdDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCByZWdUMSkpOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxv
Y2spLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Moc2NyYXRj
aEdQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmV0dXJuVmFsdWVHUFIp
OworICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSksIHJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkMzIo
QWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRp
bmdFcG9jaCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0
LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJldHVyblZhbHVlR1BSLCBKU0dsb2JhbE9iamVj
dDo6b2Zmc2V0T2ZHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkpLCBzY3JhdGNoR1BSKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0yMjAxLDExICsyMDkyLDExIEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpnZW5lcmF0ZU9wUmVzb2x2
ZVNjb3BlVGh1bmsoVk0mIHZtKQogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3Bl
Rm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSBmb3IgR2xvYmFs
VmFyKiwKICAgICAgICAgICAgIC8vIGFuZCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxMZXhpY2FsRW52aXJvbm1lbnQoKSBmb3IgR2xvYmFsTGV4aWNhbFZhciouCi0gICAgICAgICAg
ICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1Qw
KTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDAsIENvZGVCbG9jazo6b2Zm
c2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGRvVmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7CisgICAg
ICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayks
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BS
LCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSwgcmV0dXJuVmFsdWVHUFIpOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBl
ID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50
KCkpLCByZWdUMCk7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZXR1cm5W
YWx1ZUdQUiwgSlNHbG9iYWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEVudmlyb25tZW50
KCkpLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIENsb3N1cmVWYXI6CkBAIC0yMjg0LDI0ICsyMTc1LDI1IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5l
cmF0b3IoVk0mIHZtCiAgICAgLy8gVGhlIGZhc3QgcGF0aCBhbHJlYWR5IHB1c2hlZCB0aGUgcmV0
dXJuIGFkZHJlc3MuCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3RlcnM6
OmVicCk7Ci0jZWxpZiBDUFUoQVJNNjQpCisjZWxpZiBDUFUoQVJNNjQpIHx8IENQVShBUk1fVEhV
TUIyKQogICAgIGppdC5wdXNoUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVy
KTsKKyNlbGlmIENQVShNSVBTKQorICAgIGppdC5wdXNoUGFpcihmcmFtZVBvaW50ZXJSZWdpc3Rl
ciwgcmV0dXJuQWRkcmVzc1JlZ2lzdGVyKTsKKyNlbHNlCisjICAgZXJyb3IgIk5vdCBpbXBsZW1l
bnRlZCBvbiBwbGF0Zm9ybSIKICNlbmRpZgogCi0gICAgY29uc3RleHByIEdQUlJlZyBpbmNvbWlu
Z0J5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgY29uc3RleHByIEdQUlJlZyBpbmNvbWlu
Z0J5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDM7CiAgICAgaml0LnN0b3JlMzIoaW5jb21pbmdCeXRl
Y29kZU9mZnNldEdQUiwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSk7CiAKLSAgICBjb25zdGV4cHIgR1BSUmVnIGNvZGVCbG9ja0dQUiA9IGFyZ3VtZW50
R1BSMzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKICAgICBjb25z
dGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IGFyZ3VtZW50R1BSMDsKICAgICBjb25zdGV4
cHIgR1BSUmVnIGluc3RydWN0aW9uR1BSID0gYXJndW1lbnRHUFIxOworICAgIHN0YXRpY19hc3Nl
cnQobm9PdmVybGFwKGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIsIHNjcmF0Y2hHUFIgLCBnbG9i
YWxPYmplY3RHUFIsIGluc3RydWN0aW9uR1BSKSk7CiAKLSAgICBzdGF0aWNfYXNzZXJ0KGluY29t
aW5nQnl0ZWNvZGVPZmZzZXRHUFIgIT0gY29kZUJsb2NrR1BSKTsKLSAgICBzdGF0aWNfYXNzZXJ0
KGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIgIT0gZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIgIT0gaW5zdHJ1Y3Rpb25HUFIpOwot
Ci0gICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBj
b2RlQmxvY2tHUFIpOwotICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2Rl
QmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwotICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MoY29kZUJsb2NrR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mSW5zdHJ1
Y3Rpb25zUmF3UG9pbnRlcigpKSwgaW5zdHJ1Y3Rpb25HUFIpOworICAgIGppdC5sb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgc2NyYXRjaEdQUik7CisgICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3Moc2NyYXRj
aEdQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSksIGluc3Ry
dWN0aW9uR1BSKTsKICAgICBqaXQuYWRkUHRyKGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIsIGlu
c3RydWN0aW9uR1BSKTsKIAogICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRp
b25SZXNvbHZlU2NvcGVGb3JCYXNlbGluZSk+KGdsb2JhbE9iamVjdEdQUiwgaW5zdHJ1Y3Rpb25H
UFIpOwpAQCAtMjMxMSw4ICsyMjAzLDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSklUOjpzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mIHZtCiAKICNp
ZiBDUFUoWDg2XzY0KQogICAgIGppdC5wb3AoWDg2UmVnaXN0ZXJzOjplYnApOwotI2VsaWYgQ1BV
KEFSTTY0KQotICAgIGppdC5wb3BQYWlyKENDYWxsSGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0
ZXIsIENDYWxsSGVscGVyczo6bGlua1JlZ2lzdGVyKTsKKyNlbGlmIENQVShBUk02NCkgfHwgQ1BV
KEFSTV9USFVNQjIpCisgICAgaml0LnBvcFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtS
ZWdpc3Rlcik7CisjZWxpZiBDUFUoTUlQUykKKyAgICBqaXQucG9wUGFpcihmcmFtZVBvaW50ZXJS
ZWdpc3RlciwgcmV0dXJuQWRkcmVzc1JlZ2lzdGVyKTsKKyNlbHNlCisjICAgZXJyb3IgIk5vdCBp
bXBsZW1lbnRlZCBvbiBwbGF0Zm9ybSIKICNlbmRpZgogICAgIGppdC5yZXQoKTsKIApAQCAtMjMy
MiwxNzIgKzIyMTgsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJiB2bQogICAgIHBhdGNoQnVmZmVy
LmxpbmsoZXhjZXB0aW9uQ2hlY2ssIENvZGVMb2NhdGlvbkxhYmVsKGhhbmRsZXIucmV0YWdnZWRD
b2RlPE5vUHRyVGFnPigpKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIs
IEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfcmVzb2x2ZV9zY29wZSIpOwogfQot
I2VuZGlmIC8vICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAotdm9pZCBKSVQ6OmVtaXRMb2Fk
V2l0aFN0cnVjdHVyZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3Ry
dWN0dXJlU2xvdCkKLXsKLSAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3QsIHJlZ1QxKTsKLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1
Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QxKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1
ZSogb3BlcmFuZCwgR1BSUmVnIHJlZykKLXsKLSAgICBsb2FkUHRyKG9wZXJhbmQsIHJlZyk7Ci19
Ci0KLXZvaWQgSklUOjplbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3Bl
cmFuZCwgR1BSUmVnIHJlZykKLXsKLSAgICBsb2FkUHRyKG9wZXJhbmQsIHJlZyk7Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZyksIHJlZyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZh
cihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQotewotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAq
IHNpemVvZihSZWdpc3RlcikpLCByZWdUMCk7Ci19Ci0KLSNpZiAhRU5BQkxFKEVYVFJBX0NUSV9U
SFVOS1MpCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5t
X3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGUgPSBieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsK
LQotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMjsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Ci0KLSAgICBKdW1wTGlzdCBzbG93Q2FzZTsK
LQotICAgIGF1dG8gZG9WYXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVj
dGlvbkNoZWNrcykgewotICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKLSAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3Qs
IG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFw
cGVuZChicmFuY2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRP
ZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKLSAgICB9OwotICAgIAot
ICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7Ci0gICAg
ICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToK
LSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAg
ICAgICAgICAgIC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3
ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVj
dC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2
YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwg
T3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgpLCByZWdUMSk7Ci0g
ICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwot
ICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QxKTsKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChicmFuY2gzMihO
b3RFcXVhbCwgQWRkcmVzcyhzY29wZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDEpKTsKLQotICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQp
PihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKENh
bGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJlZ1Qz
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBzY29wZUdQUiwgcmVn
VDMpOwotICAgICAgICAgICAgfSkpOwotCi0gICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRh
KGJ5dGVjb2RlLCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCBy
ZWdUMSk7Ci0KLSAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAgICAg
ICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1Qx
LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBh
Ym9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwotICAgICAgICAgICAgICAg
IGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVn
VDApOwotICAgICAgICAgICAgbmVnMzIocmVnVDEpOwotICAgICAgICAgICAgc2lnbkV4dGVuZDMy
VG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAs
IHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpLCByZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIEdsb2JhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6Ci0gICAgICAgIGNh
c2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBk
b1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7
Ci0gICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEZyb21TY29w
ZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDApLCByZWdUMCk7Ci0gICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUg
PT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNrLgotICAgICAgICAgICAgICAgIHNsb3dD
YXNlLmFwcGVuZChicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQo
KSwgcmVnVDMpOwotICAgICAgICAgICAgc3RhdGljX2Fzc2VydCgxIDw8IDMgPT0gc2l6ZW9mKFJl
Z2lzdGVyKSk7Ci0gICAgICAgICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIHJlZ1QzKTsK
LSAgICAgICAgICAgIGFkZFB0cihzY29wZUdQUiwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QzLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMo
KSksIHJlZ1QwKTsKLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRHluYW1pYzoK
LSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIE1vZHVsZVZh
cjoKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgaWYgKHByb2Zp
bGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhciB8fCBwcm9maWxlZFJlc29sdmVUeXBlID09IENs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICBlbWl0Q29kZShwcm9maWxl
ZFJlc29sdmVUeXBlKTsKLSAgICBlbHNlIHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wR2V0RnJvbVNjb3BlOjpNZXRh
ZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJbmZvKCksIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3Rl
ZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBl
IGludG8gVDAKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9i
YWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEds
b2JhbFZhci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbiA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
LSAgICAgICAgbm90R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbi5saW5rKHRoaXMpOwotCi0gICAg
ICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBpc0dsb2Jh
bFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsK
LSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9i
YWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7Ci0K
LSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgfQotCi0gICAgYWRkU2xvd0Nhc2Uo
c2xvd0Nhc2UpOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDAp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9t
U2NvcGU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotCi0g
ICAgbG9hZEdsb2JhbE9iamVjdChhcmd1bWVudEdQUjApOwotICAgIGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShieXRlY29kZSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIGFyZ3VtZW50R1BS
MCwgaW5zdHJ1Y3Rpb24pOwotfQotCi0jZWxzZQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21f
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKQEAg
LTI1MDIsMTEgKzIyMzMsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIGNvbnN0ZXhwciBHUFJS
ZWcgbWV0YWRhdGFHUFIgPSByZWdUNDsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0g
cmVnVDI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBieXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1Owor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUMzsKIAogICAgIHVp
bnQzMl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5v
ZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNvZGUpOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY29wZSwgc2NvcGVHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2Fk
KHNjb3BlLCBzY29wZUdQUik7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtZXRhZGF0YU9mZnNl
dCksIHNfbWV0YWRhdGFHUFIsIG1ldGFkYXRhR1BSKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMihi
eXRlY29kZU9mZnNldCksIGJ5dGVjb2RlT2Zmc2V0R1BSKTsKIApAQCAtMjUyOSw3ICsyMjYwLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICAgICAgY29kZSA9IHZtLmdldENUSVN0dWIoZ2VuZXJhdGVP
cEdldEZyb21TY29wZVRodW5rPEdsb2JhbFZhcj4pOwogCiAgICAgZW1pdE5ha2VkTmVhckNhbGwo
Y29kZS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVKU1Ip
OwogfQogCiB0ZW1wbGF0ZSA8UmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZT4KQEAgLTI1
NDIsNiArMjI3MywxMCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6Z2VuZXJhdGVPcEdldEZyb21TY29wZVRodW5rKFZNJiB2bSkKICAgICB1c2luZyBNZXRhZGF0
YSA9IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTsKICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFk
YXRhR1BSID0gcmVnVDQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QyOwor
ICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUMzsgLy8gVXNlZCBv
bmx5IG9uIHNsb3cgcGF0aAorICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q1
OworICAgIFVOVVNFRF9QQVJBTShieXRlY29kZU9mZnNldEdQUik7CisgICAgc3RhdGljX2Fzc2Vy
dChub092ZXJsYXAocmV0dXJuVmFsdWVKU1IsIG1ldGFkYXRhR1BSLCBzY29wZUdQUiwgYnl0ZWNv
ZGVPZmZzZXRHUFIsIHNjcmF0Y2hHUFIpKTsKIAogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKQEAg
LTI1NTIsMTAgKzIyODcsMTAgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYgdm0pCiAgICAgYXV0byBkb1Zh
ckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSB7CiAg
ICAgICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2Nr
KSwgcmVnVDMpOwotICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6
Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMyk7Ci0gICAgICAgIGppdC5sb2FkUHRyKEFk
ZHJlc3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVjdCwgbV92YXJJbmplY3Rp
b25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFu
Y2g4KEVxdWFsLCBBZGRyZXNzKHJlZ1QzLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0YXRlKCkp
LCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFs
T2JqZWN0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhzY3Jh
dGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0
Y2hwb2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFu
Y2g4KEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3Rh
dGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAgICAgCiAgICAg
YXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKQEAgLTI1NjMs
MjkgKzIyOTgsMjggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6
OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYgdm0pCiAgICAgICAgIGNhc2UgR2xvYmFs
UHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CiAgICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rp
b24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBH
bG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5n
IGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
bWV0YWRhdGFHUFIsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUo
KSksIHJlZ1QxKTsKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoVGVzdFB0
cihaZXJvLCByZWdUMSkpOwotICAgICAgICAgICAgaml0LmxvYWQzMihBZGRyZXNzKHJlZ1QxLCBT
dHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHNjb3BlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRP
ZlN0cnVjdHVyZSgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQo
aml0LmJyYW5jaFRlc3RQdHIoWmVybywgc2NyYXRjaEdQUikpOworICAgICAgICAgICAgaml0Lmxv
YWQzMihBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihO
b3RFcXVhbCwgQWRkcmVzcyhzY29wZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
c2NyYXRjaEdQUikpOwogCiAgICAgICAgICAgICBqaXQuaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxK
dW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgaml0LmxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2Jh
bE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgICAgIHJldHVybiBqaXQuYnJhbmNoUHRy
KEVxdWFsLCBzY29wZUdQUiwgcmVnVDMpOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBDb2RlQmxvY2s6Om9mZnNl
dE9mR2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
aml0LmJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAg
fSkpOwogCi0gICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRh
ZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMSk7CisgICAgICAgICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCBzY3Jh
dGNoR1BSKTsKIAogICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgICAg
ICAgICAgSnVtcCBpc091dE9mTGluZSA9IGppdC5icmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWws
IHJlZ1QxLCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAg
ICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gaml0LmJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwg
c2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CiAgICAgICAg
ICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7CiAg
ICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluaygmaml0KTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgaml0Lm5lZzMyKHJlZ1QxKTsKLSAg
ICAgICAgICAgIGppdC5zaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgICAgICAg
ICAgaml0LmxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RP
dXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZWdUMCk7Cisg
ICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHNjb3BlR1BSLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCBzY29wZUdQUik7CisgICAgICAgICAgICBqaXQubmVnUHRyKHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgaml0LmxvYWRWYWx1ZShCYXNlSW5kZXgoc2NvcGVHUFIsIHNjcmF0
Y2hHUFIsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSksIHJldHVyblZhbHVlSlNSKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgpAQCAtMjU5MywyMCArMjMyNywxNiBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZy
b21TY29wZVRodW5rKFZNJiB2bSkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAg
ICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAg
ICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0
YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDApOwotICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCksIHJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgaml0LmxvYWRWYWx1ZShBZGRyZXNzKHNjcmF0Y2hHUFIpLCByZXR1cm5W
YWx1ZUpTUik7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZh
ciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykgLy8gVERaIGNoZWNrLgotICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJh
bmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQu
YnJhbmNoSWZFbXB0eShyZXR1cm5WYWx1ZUpTUikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKICAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MobWV0YWRhdGFHUFIsICBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCByZWdUMyk7Ci0g
ICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KDEgPDwgMyA9PSBzaXplb2YoUmVnaXN0ZXIpKTsKLSAg
ICAgICAgICAgIGppdC5sc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIHJlZ1QzKTsKLSAgICAgICAg
ICAgIGppdC5hZGRQdHIoc2NvcGVHUFIsIHJlZ1QzKTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRy
KEFkZHJlc3MocmVnVDMsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygp
KSwgcmVnVDApOwotCisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKG1ldGFkYXRhR1BS
LCAgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICBqaXQubG9hZFZhbHVlKEJhc2VJbmRleChzY29wZUdQUiwgc2NyYXRjaEdQUiwgVGltZXNFaWdo
dCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZXR1cm5WYWx1
ZUpTUik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgogICAgICAg
ICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5qdW1wKCkpOwpAQCAtMjYyMywxMSArMjM1MywxMSBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdl
dEZyb21TY29wZVRodW5rKFZNJiB2bSkKICAgICAgICAgZW1pdENvZGUocHJvZmlsZWRSZXNvbHZl
VHlwZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAg
aml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQdXRJ
bmZvKCkpLCByZWdUMCk7Ci0gICAgICAgIGppdC5hbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5m
bzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorICAgICAg
ICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkdldFB1
dEluZm8oKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEdl
dFB1dEluZm86OnR5cGVCaXRzKSwgc2NyYXRjaEdQUik7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50
byBzY3JhdGNoR1BSCiAKICAgICAgICAgYXV0byBlbWl0Q2FzZVdpdGhvdXRDaGVjayA9IFsmXSAo
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgICAgIEp1bXAgbm90Q2FzZSA9IGpp
dC5icmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwor
ICAgICAgICAgICAgSnVtcCBub3RDYXNlID0gaml0LmJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNo
R1BSLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgICAgIGVtaXRDb2RlKHJl
c29sdmVUeXBlKTsKICAgICAgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoaml0Lmp1bXAoKSk7CiAg
ICAgICAgICAgICBub3RDYXNlLmxpbmsoJmppdCk7CkBAIC0yNjYxLDggKzIzOTEsNyBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcEdldEZyb21T
Y29wZVRodW5rKFZNJiB2bSkKICAgICB9CiAKICAgICBzdGF0aWNfYXNzZXJ0KFZhbHVlUHJvZmls
ZTo6bnVtYmVyT2ZCdWNrZXRzID09IDEpOwotICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNz
KG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6
Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwotCisgICAgaml0LnN0b3JlVmFsdWUocmV0dXJuVmFs
dWVKU1IsIEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKSAr
IFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJzdEJ1Y2tldCgpKSk7CiAgICAgaml0LnJldCgpOwog
CiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1
ZmZlcjo6UHJvZmlsZTo6VGh1bmspOwpAQCAtMjY4MCw0OSArMjQwOSw2NiBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdl
bmVyYXRvcihWTSYgdgogCiAjaWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucHVzaChYODZSZWdpc3Rl
cnM6OmVicCk7Ci0jZWxpZiBDUFUoQVJNNjQpCisjZWxpZiBDUFUoQVJNNjQpIHx8IENQVShBUk1f
VEhVTUIyKQogICAgIGppdC5wdXNoUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lz
dGVyKTsKKyNlbGlmIENQVShNSVBTKQorICAgIGppdC5wdXNoUGFpcihmcmFtZVBvaW50ZXJSZWdp
c3RlciwgcmV0dXJuQWRkcmVzc1JlZ2lzdGVyKTsKKyNlbHNlCisjICAgZXJyb3IgIk5vdCBpbXBs
ZW1lbnRlZCBvbiBwbGF0Zm9ybSIKICNlbmRpZgogCiAgICAgdXNpbmcgTWV0YWRhdGEgPSBPcEdl
dEZyb21TY29wZTo6TWV0YWRhdGE7CiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUdQUiA9
IHJlZ1Q0OwotICAgIGNvbnN0ZXhwciBHUFJSZWcgaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiA9
IHJlZ1Q1OworICAgIGNvbnN0ZXhwciBHUFJSZWcgaW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiA9
IHJlZ1QzOwogICAgIGppdC5zdG9yZTMyKGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIsIHRhZ0Zv
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwogCi0gICAgY29u
c3RleHByIEdQUlJlZyBjb2RlQmxvY2tHUFIgPSBhcmd1bWVudEdQUjM7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7CiAgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxP
YmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CiAgICAgY29uc3RleHByIEdQUlJlZyBpbnN0cnVjdGlv
bkdQUiA9IGFyZ3VtZW50R1BSMTsKLSAgICBzdGF0aWNfYXNzZXJ0KGluY29taW5nQnl0ZWNvZGVP
ZmZzZXRHUFIgIT0gY29kZUJsb2NrR1BSKTsKLSAgICBzdGF0aWNfYXNzZXJ0KGluY29taW5nQnl0
ZWNvZGVPZmZzZXRHUFIgIT0gZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICBzdGF0aWNfYXNzZXJ0KGlu
Y29taW5nQnl0ZWNvZGVPZmZzZXRHUFIgIT0gaW5zdHJ1Y3Rpb25HUFIpOwotICAgIHN0YXRpY19h
c3NlcnQobWV0YWRhdGFHUFIgIT0gY29kZUJsb2NrR1BSKTsKLSAgICBzdGF0aWNfYXNzZXJ0KG1l
dGFkYXRhR1BSICE9IGdsb2JhbE9iamVjdEdQUik7Ci0gICAgc3RhdGljX2Fzc2VydChtZXRhZGF0
YUdQUiAhPSBpbnN0cnVjdGlvbkdQUik7CisgICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAobWV0
YWRhdGFHUFIsIGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIsIHNjcmF0Y2hHUFIsIGdsb2JhbE9i
amVjdEdQUiwgaW5zdHJ1Y3Rpb25HUFIpKTsKIAotICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgY29kZUJsb2NrR1BSKTsKLSAgICBqaXQubG9hZFB0
cihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgp
KSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICBqaXQubG9hZFB0cihBZGRyZXNzKGNvZGVCbG9ja0dQ
UiwgQ29kZUJsb2NrOjpvZmZzZXRPZkluc3RydWN0aW9uc1Jhd1BvaW50ZXIoKSksIGluc3RydWN0
aW9uR1BSKTsKKyAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayksIHNjcmF0Y2hHUFIpOworICAgIGppdC5sb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwg
Q29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAg
ICBqaXQubG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZJbnN0
cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBpbnN0cnVjdGlvbkdQUik7CiAgICAgaml0LmFkZFB0cihp
bmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSLCBpbnN0cnVjdGlvbkdQUik7CiAKLSAgICBBU1NFUlQo
UmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKS5jb250YWlucyhHUFJJbmZvOjpudW1i
ZXJUYWdSZWdpc3RlcikpOwotICAgIGppdC5tb3ZlKG1ldGFkYXRhR1BSLCBHUFJJbmZvOjpudW1i
ZXJUYWdSZWdpc3Rlcik7IC8vIFByZXNlcnZlIG1ldGFkYXRhIGluIGEgY2FsbGVlIHNhdmVkIHJl
Z2lzdGVyLgorICAgIC8vIFByZXNlcnZlIG1ldGFkYXRhIGluIGEgY2FsbGVlIHNhdmVkIHJlZ2lz
dGVyLgorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgY29uc3RleHByIEdQUlJlZyBtZXRhZGF0YUNT
UiA9IEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyOworICAgIGF1dG8gcmVzdG9yZUhpamFja2Vk
Q1NSID0gWyZdKCkgeworICAgICAgICBqaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVt
YmVyVGFnKSwgR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIpOworICAgIH07CisjZWxpZiBVU0Uo
SlNWQUxVRTMyXzY0KQorICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFDU1IgPSBzX21ldGFk
YXRhR1BSOworICAgIGF1dG8gcmVzdG9yZUhpamFja2VkQ1NSID0gWyZdKCkgeworICAgICAgICBq
aXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHNfbWV0YWRh
dGFHUFIpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIENvZGVC
bG9jazo6b2Zmc2V0T2ZNZXRhZGF0YVRhYmxlKCkpLCBzX21ldGFkYXRhR1BSKTsKKyAgICB9Owor
I2VuZGlmCisgICAgQVNTRVJUKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkuY29u
dGFpbnMobWV0YWRhdGFDU1IpKTsKKyAgICBqaXQubW92ZShtZXRhZGF0YUdQUiwgbWV0YWRhdGFD
U1IpOworCiAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldEZyb21T
Y29wZSk+KGdsb2JhbE9iamVjdEdQUiwgaW5zdHJ1Y3Rpb25HUFIpOwogICAgIGppdC5wcmVwYXJl
Q2FsbE9wZXJhdGlvbih2bSk7CiAgICAgQ2FsbCBvcGVyYXRpb24gPSBqaXQuY2FsbChPcGVyYXRp
b25QdHJUYWcpOwogICAgIEp1bXAgZXhjZXB0aW9uQ2hlY2sgPSBqaXQuZW1pdE5vblBhdGNoYWJs
ZUV4Y2VwdGlvbkNoZWNrKHZtKTsKIAotICAgIGppdC5zdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKEdQ
UkluZm86Om51bWJlclRhZ1JlZ2lzdGVyLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkgKyBW
YWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwotICAgIGppdC5tb3ZlKFRydXN0
ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcpLCBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3Rlcik7
CisgICAgaml0LnN0b3JlVmFsdWUocmV0dXJuVmFsdWVKU1IsIEFkZHJlc3MobWV0YWRhdGFDU1Is
IE1ldGFkYXRhOjpvZmZzZXRPZlByb2ZpbGUoKSArIFZhbHVlUHJvZmlsZTo6b2Zmc2V0T2ZGaXJz
dEJ1Y2tldCgpKSk7CisgICAgcmVzdG9yZUhpamFja2VkQ1NSKCk7CiAKICNpZiBDUFUoWDg2XzY0
KQogICAgIGppdC5wb3AoWDg2UmVnaXN0ZXJzOjplYnApOwotI2VsaWYgQ1BVKEFSTTY0KQorI2Vs
aWYgQ1BVKEFSTTY0KSB8fCBDUFUoQVJNX1RIVU1CMikKICAgICBqaXQucG9wUGFpcihmcmFtZVBv
aW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKKyNlbGlmIENQVShNSVBTKQorICAgIGppdC5w
b3BQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCByZXR1cm5BZGRyZXNzUmVnaXN0ZXIpOworI2Vs
c2UKKyMgICBlcnJvciAiTm90IGltcGxlbWVudGVkIG9uIHBsYXRmb3JtIgogI2VuZGlmCiAgICAg
aml0LnJldCgpOwogCiAgICAgZXhjZXB0aW9uQ2hlY2subGluaygmaml0KTsKLSAgICBqaXQubW92
ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgR1BSSW5mbzo6bnVtYmVyVGFnUmVn
aXN0ZXIpOworICAgIHJlc3RvcmVIaWphY2tlZENTUigpOwogICAgIEp1bXAganVtcFRvSGFuZGxl
ciA9IGppdC5qdW1wKCk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKQEAgLTI3MzEs
NyArMjQ3Nyw2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpz
bG93X29wX2dldF9mcm9tX3Njb3BlR2VuZXJhdG9yKFZNJiB2CiAgICAgcGF0Y2hCdWZmZXIubGlu
ayhqdW1wVG9IYW5kbGVyLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRU
aHVua1B0clRhZywgIkJhc2VsaW5lOiBzbG93X29wX2dldF9mcm9tX3Njb3BlIik7CiB9Ci0jZW5k
aWYgLy8gIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKQEAgLTI3
NDcsMjMgKzI0OTIsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hl
Y2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBm
b3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmplY3QuCiAgICAgICAgICAgICAvLyBBZGRpdGlv
bmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rp
b24uCi0gICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2Nv
cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlN0cnVjdHVyZSgpLCByZWdUMSk7Ci0gICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgICAgICAgICBhZGRTbG93
Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QxKSk7Ci0gICAgICAgICAgICBsb2FkMzIoQWRk
cmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7CisgICAgICAgICAgICBjb25zdGV4
cHIgSlNWYWx1ZVJlZ3MgdmFsdWVKU1IgPSBqc1JlZ1QxMDsKKyAgICAgICAgICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMjsKKyAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcg
c2NyYXRjaEdQUjEgPSByZWdUMzsKKyAgICAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRj
aEdQUjIgPSByZWdUNDsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKHZhbHVl
SlNSLCBzY29wZUdQUiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyKSk7CisgICAgICAgICAgICBs
b2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZz
ZXRPZlN0cnVjdHVyZSgpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyUGF5bG9hZChzY29wZSwgc2NvcGVHUFIpOworICAgICAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdFB0cihaZXJvLCBzY3JhdGNoR1BSMSkpOworICAgICAgICAgICAgbG9hZDMy
KEFkZHJlc3Moc2NyYXRjaEdQUjEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNj
cmF0Y2hHUFIxKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBB
ZGRyZXNzKHNjb3BlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BS
MSkpOwogCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7
CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCB2YWx1ZUpTUik7CiAK
ICAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+
IEp1bXAgewotICAgICAgICAgICAgICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMyk7CisgICAgICAg
ICAgICAgICAgbG9hZEdsb2JhbE9iamVjdChzY3JhdGNoR1BSMik7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIHNjcmF0Y2hHUFIyKTsKICAgICAgICAg
ICAgIH0pKTsKIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFk
YXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwg
cmVnVDEpOwotICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRy
KHJlZ1QyLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxp
bmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2Ny
YXRjaEdQUjIpOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQ
dXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHNjcmF0Y2hHUFIxKTsKKyAg
ICAgICAgICAgIG5lZ1B0cihzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICBzdG9yZVZhbHVlKHZh
bHVlSlNSLCBCYXNlSW5kZXgoc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIxLCBUaW1lc0VpZ2h0LCAo
Zmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKICAg
ICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjc3MSwyMiArMjUyMSwyMyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1Qw
KTsKLSAgICAgICAgICAgIGVtaXRWYXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlLCByZWdUMCk7
CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChqc1JlZ1QxMCwgcmVnVDIsIHJl
Z1QzKSk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMik7CisgICAgICAgICAgICBlbWl0VmFyUmVhZE9u
bHlDaGVjayhyZXNvbHZlVHlwZSwgcmVnVDIpOwogCi0gICAgICAgICAgICBsb2FkUHRyRnJvbU1l
dGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQo
KSwgcmVnVDApOworICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQ
dXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCksIHJlZ1QyKTsKIAogICAgICAg
ICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5pbml0aWFs
aXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVz
b2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAg
ICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ug
d2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2Fs
bHkuCi0gICAgICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDEpOwotICAg
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKKyAgICAgICAg
ICAgICAgICBsb2FkVmFsdWUoQWRkcmVzcyhyZWdUMiksIGpzUmVnVDEwKTsKKyAgICAgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KGpzUmVnVDEwKSk7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29w
ZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hwb2ludFNldCgpLCByZWdUMSk7Ci0gICAgICAgICAg
ICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QxKTsKKyAgICAgICAgICAgIGxvYWRQdHJG
cm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0
Y2hwb2ludFNldCgpLCByZWdUMyk7CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBv
aW50KHJlZ1QzKTsKIAotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDEpOwotICAgICAgICAgICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCkpOworICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwganNSZWdUMTApOworICAgICAg
ICAgICAgc3RvcmVWYWx1ZShqc1JlZ1QxMCwgQWRkcmVzcyhyZWdUMikpOwogCiAgICAgICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAg
ICAgICAgICAgYnJlYWs7CkBAIC0yNzk0LDE0ICsyNTQ1LDE1IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
ICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgog
ICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSwgcmVnVDApOworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAoanNSZWdU
MTAsIHJlZ1QyLCByZWdUMykpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDMpOwogCi0gICAgICAgICAg
ICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpv
ZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDApOworICAgICAgICAgICAgbG9hZFB0ckZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZXYXRjaHBv
aW50U2V0KCksIHJlZ1QzKTsKICAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNv
ZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMik7Ci0g
ICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVXYXRjaHBvaW50KHJlZ1QwKTsKLSAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKLSAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICAgICAgICAgIHN0b3JlNjQocmVn
VDEsIEJhc2VJbmRleChyZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQsIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSk7CisgICAgICAgICAgICBlbWl0Tm90aWZ5V3JpdGVX
YXRjaHBvaW50KHJlZ1QzKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIGpzUmVnVDEwKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2Fk
KHNjb3BlLCByZWdUMyk7CisgICAgICAgICAgICBzdG9yZVZhbHVlKGpzUmVnVDEwLCBCYXNlSW5k
ZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0
T2ZWYXJpYWJsZXMoKSkpOwogCiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2
YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yOTQ4LDEw
ICsyNzAwLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1
bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5t
X2luZGV4OwogICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdU
MCk7Ci0gICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9m
ZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1QwKTsK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2Fk
KGFyZ3VtZW50cywgcmVnVDApOworICAgIGxvYWRWYWx1ZShBZGRyZXNzKHJlZ1QwLCBEaXJlY3RB
cmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPikpLCBqc1JlZ1QxMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZSwganNSZWdUMTApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBqc1JlZ1QxMCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTI5NjAsNTEgKzI3MTIsMTUgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3Vt
ZW50czsKICAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMSk7Ci0gICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJn
dW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChyZWdUMiwganNSZWdUMTAp
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChhcmd1bWVudHMsIHJlZ1QyKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBqc1JlZ1QxMCk7CisgICAgc3RvcmVW
YWx1ZShqc1JlZ1QxMCwgQWRkcmVzcyhyZWdUMiwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zm
c2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CiAKICAgICBl
bWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0
dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKLXsKLSAgICAvLyB2YWx1
ZSBtYXkgYmUgaW52YWxpZCBWaXJ0dWFsUmVnaXN0ZXIgaWYgbW9kZSBpcyBVbmNvbmRpdGlvbmFs
V3JpdGVCYXJyaWVyIG9yIFNob3VsZEZpbHRlckJhc2UuCi0gICAgSnVtcCB2YWx1ZU5vdENlbGw7
Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0
ZXJCYXNlQW5kVmFsdWUpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwot
ICAgIH0KLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCk7Ci0g
ICAgSnVtcCBvd25lck5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFu
ZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKLSAgICAgICAgb3duZXJOb3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgb3duZXJJc1JlbWVtYmVyZWRP
ckluRWRlbiA9IGJhcnJpZXJCcmFuY2godm0oKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBjYWxsT3Bl
cmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgJnZt
KCksIHJlZ1QwKTsKLSAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7Ci0K
LSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91
bGRGaWx0ZXJCYXNlKQotICAgICAgICBvd25lck5vdENlbGwubGluayh0aGlzKTsKLSAgICBpZiAo
bW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRW
YWx1ZSkgCi0gICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwotfQotCi12b2lkIEpJVDo6
ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdy
aXRlQmFycmllck1vZGUgbW9kZSkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7Ci0gICAgSnVtcCB2YWx1ZU5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxk
RmlsdGVyVmFsdWUpCi0gICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MCk7Ci0KLSAgICBlbWl0V3JpdGVCYXJyaWVyKG93bmVyKTsKLQotICAgIGlmIChtb2RlID09IFNo
b3VsZEZpbHRlclZhbHVlKSAKLSAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7Ci19Ci0K
IHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKQEAgLTMwMTIsMTEgKzI3MjgsMTEgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QxLCBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChp
bmRleCkpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYmFzZSwg
cmVnVDApOworICAgIGxvYWRWYWx1ZShBZGRyZXNzKHJlZ1QwLCBKU0ludGVybmFsRmllbGRPYmpl
Y3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpLCBqc1JlZ1QxMCk7CiAKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUs
IGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTApOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTMwMjYsMTIgKzI3NDIsMTUgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
ICAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMSk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTSW50ZXJu
YWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSkpOworICAg
IHN0YXRpY19hc3NlcnQobm9PdmVybGFwKHJlZ1QyLCBqc1JlZ1QxMCkpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJhc2UsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCBqc1JlZ1QxMCk7CisgICAgc3RvcmVWYWx1ZShqc1JlZ1QxMCwgQWRkcmVz
cyhyZWdUMiwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmll
bGQoaW5kZXgpKSk7CiAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKwogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3Byb3BlcnR5X2VudW1lcmF0b3IoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dFByb3BlcnR5RW51bWVyYXRvcj4oKTsKQEAgLTMyNjgsMTggKzI5ODcsOTYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3QKICAgICBlbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9ySGFzT3du
UHJvcGVydHk+KCksIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpOwogfQog
Ci0jZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQorI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKwordm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxs
KHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2dldF9wcm9wZXJ0eV9lbnVtZXJh
dG9yKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sK
KyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd19wYXRoX2VudW1lcmF0b3JfbmV4dCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsK
K30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQ
YXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2dl
dF9ieV92YWwpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJikKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZP
Uk0oKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwg
c2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudW1lcmF0
b3JfaW5fYnlfdmFsKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6
ZW1pdF9vcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRo
aXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudW1lcmF0b3JfaGFzX293bl9wcm9w
ZXJ0eSk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKworI2VuZGlmCisKKyNpZiBVU0Uo
SlNWQUxVRTY0KQogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIg
b3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQogewog
ICAgIC8vIHZhbHVlIG1heSBiZSBpbnZhbGlkIFZpcnR1YWxSZWdpc3RlciBpZiBtb2RlIGlzIFVu
Y29uZGl0aW9uYWxXcml0ZUJhcnJpZXIgb3IgU2hvdWxkRmlsdGVyQmFzZS4KICAgICBKdW1wIHZh
bHVlTm90Q2VsbDsKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09
IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewotICAgICAgICBlbWl0TG9hZFRhZyh2YWx1ZSwg
cmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAg
ICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAgfQotICAg
IAotICAgIGVtaXRMb2FkKG93bmVyLCByZWdUMCwgcmVnVDEpOworCisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihvd25lciwgcmVnVDApOworICAgIEp1bXAgb3duZXJOb3RDZWxsOworICAgIGlm
IChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRl
ckJhc2UpCisgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisK
KyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCks
IHJlZ1QwLCByZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2bSgpLCByZWdUMCk7CisgICAgb3duZXJJc1JlbWVt
YmVyZWRPckluRWRlbi5saW5rKHRoaXMpOworCisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVy
QmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKKyAgICAgICAgb3duZXJO
b3RDZWxsLmxpbmsodGhpcyk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwg
bW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpCisgICAgICAgIHZhbHVlTm90Q2VsbC5s
aW5rKHRoaXMpOworfQorCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVy
LCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKK3sKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgSnVtcCB2YWx1ZU5vdENl
bGw7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpCisgICAgICAgIHZhbHVlTm90
Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICBlbWl0V3JpdGVCYXJyaWVyKG93
bmVyKTsKKworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKQorICAgICAgICB2YWx1
ZU5vdENlbGwubGluayh0aGlzKTsKK30KKworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKwordm9p
ZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKK3sKKyAgICAvLyB2YWx1ZSBtYXkg
YmUgaW52YWxpZCBWaXJ0dWFsUmVnaXN0ZXIgaWYgbW9kZSBpcyBVbmNvbmRpdGlvbmFsV3JpdGVC
YXJyaWVyIG9yIFNob3VsZEZpbHRlckJhc2UuCisgICAgSnVtcCB2YWx1ZU5vdENlbGw7CisgICAg
aWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNl
QW5kVmFsdWUpIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyh2YWx1ZSwgcmVn
VDApOworICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAg
IH0KKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwLCByZWdUMSk7CiAg
ICAgSnVtcCBvd25lck5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSB8
fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkKICAgICAgICAgb3duZXJOb3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKQEAgLTMyOTAsNyArMzA4Nyw3IEBAIHZvaWQgSklU
OjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXcml0ZUJhCiAKICAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlIHx8IG1v
ZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKQogICAgICAgICBvd25lck5vdENlbGwubGlu
ayh0aGlzKTsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNo
b3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgCisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFs
dWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpCiAgICAgICAgIHZhbHVlTm90
Q2VsbC5saW5rKHRoaXMpOwogfQogCkBAIC0zMjk4LDE3ICszMDk1LDE3IEBAIHZvaWQgSklUOjpl
bWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3Jp
dGVCYXJyaWVyTW9kCiB7CiAgICAgSnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0g
U2hvdWxkRmlsdGVyVmFsdWUpIHsKLSAgICAgICAgZW1pdExvYWRUYWcodmFsdWUsIHJlZ1QwKTsK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyh2YWx1ZSwgcmVnVDApOwogICAgICAg
ICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwogICAgIH0KIAogICAgIGVt
aXRXcml0ZUJhcnJpZXIob3duZXIpOwogCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFs
dWUpIAorICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKQogICAgICAgICB2YWx1ZU5v
dENlbGwubGluayh0aGlzKTsKIH0KIAotI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCisjZW5kaWYK
IAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBXcml0
ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYzYwYjYzMmU5NGQxZGVmMmY0MjMwZjBhODRiZTgzNmNmZDczNTJhMS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjQ4ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoSklUKQotI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCi0jaW5jbHVkZSAiSklULmgiCi0KLSNpbmNsdWRlICJDYWNoZWFibGVJZGVudGlmaWVy
SW5saW5lcy5oIgotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkRpcmVjdEFyZ3Vt
ZW50cy5oIgotI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgotI2luY2x1ZGUgIklu
dGVycHJldGVySW5saW5lcy5oIgotI2luY2x1ZGUgIkpJVElubGluZXMuaCIKLSNpbmNsdWRlICJK
U0FycmF5LmgiCi0jaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkpTTGV4aWNhbEVu
dmlyb25tZW50LmgiCi0jaW5jbHVkZSAiSlNQcm9taXNlLmgiCi0jaW5jbHVkZSAiTGlua0J1ZmZl
ci5oIgotI2luY2x1ZGUgIk9wY29kZUlubGluZXMuaCIKLSNpbmNsdWRlICJSZXN1bHRUeXBlLmgi
Ci0jaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8u
aCIKLSNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KLQotCi1uYW1lc3BhY2UgSlND
IHsKLSAgICAKLXZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eTsKLSAgICBpbnQgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgZ2V0dGVyID0gYnl0ZWNvZGUubV9hY2Nlc3NvcjsKLQotICAgIGVtaXRM
b2FkUGF5bG9hZChiYXNlLCByZWdUMSk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGdldHRlciwgcmVn
VDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgbV9wcm9maWxl
ZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5p
ZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QzKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0U2V0dGVyQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGlu
dCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIFZpcnR1YWxSZWdpc3RlciBz
ZXR0ZXIgPSBieXRlY29kZS5tX2FjY2Vzc29yOwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGJhc2Us
IHJlZ1QxKTsKLSAgICBlbWl0TG9hZFBheWxvYWQoc2V0dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgcmVnVDEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVy
dHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDMpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
Z2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0
dGVyU2V0dGVyQnlJZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIGludCBh
dHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIFZpcnR1YWxSZWdpc3RlciBn
ZXR0ZXIgPSBieXRlY29kZS5tX2dldHRlcjsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2V0dGVyID0g
Ynl0ZWNvZGUubV9zZXR0ZXI7Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDEpOwot
ICAgIGVtaXRMb2FkUGF5bG9hZChnZXR0ZXIsIHJlZ1QzKTsKLSAgICBlbWl0TG9hZFBheWxvYWQo
c2V0dGVyLCByZWdUNCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0
ZXIsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgbV9wcm9maWxl
ZENvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGVzLCByZWdU
MywgcmVnVDQpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBi
eXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGdldHRlciA9IGJ5dGVj
b2RlLm1fYWNjZXNzb3I7Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDIpOwotICAg
IGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMSwgcmVnVDApOwotICAgIGVtaXRMb2FkUGF5bG9hZChn
ZXR0ZXIsIHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFs
LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDIsIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIGF0dHJpYnV0ZXMsIHJlZ1QzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNl
dHRlckJ5VmFsPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0g
ICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIFZpcnR1
YWxSZWdpc3RlciBzZXR0ZXIgPSBieXRlY29kZS5tX2FjY2Vzc29yOwotCi0gICAgZW1pdExvYWRQ
YXlsb2FkKGJhc2UsIHJlZ1QyKTsKLSAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDEsIHJlZ1Qw
KTsKLSAgICBlbWl0TG9hZFBheWxvYWQoc2V0dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBhdHRyaWJ1dGVzLCByZWdU
Myk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoVmlydHVhbFJlZ2lzdGVyIGRz
dCwgVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1
bnNpZ25lZCBkZXB0aCkKLXsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MsIHJlZ1QwKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSwgcmVnVDEpOwotICAgIGVtaXRMb2FkUGF5bG9hZChzY29wZSwgcmVnVDApOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQotICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRTdG9y
ZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2Nv
cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwot
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKLSAgICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFk
YXRhLm1fbG9jYWxTY29wZURlcHRoOwotCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAg
ICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29w
ZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fcHJv
ZmlsZWRDb2RlQmxvY2spOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29w
ZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkMzIoJm1ldGFkYXRh
Lm1fZ2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCwgcmVnVDEpOwotICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX3Byb2ZpbGVkQ29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKS0+YWRkcmVzc09mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgp
KSwgcmVnVDEpKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpLCByZWdUMSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29w
ZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgR2xvYmFsVmFyOgot
ICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IAotICAgICAgICBj
YXNlIEdsb2JhbExleGljYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUg
PSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX3Byb2Zp
bGVkQ29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUp
OwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QxKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVn
VDEsIHJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
Q2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
czoKLSAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShkc3QsIHNjb3BlLCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkNlbGxUYWcpLCByZWdUMSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAg
ICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6Ci0gICAgICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfTsKLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7
Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAg
IGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAg
bm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7Ci0gICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5s
aW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2Jh
bExleGljYWxWYXIpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJl
c29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0
IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdU
MCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAg
ICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAg
ICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAg
ICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxM
ZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwotICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIu
bGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMubGluayh0aGlzKTsKLQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICBz
a2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVs
dDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci19Ci0KLXZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCi17Ci0gICAgZW1pdExvYWQoc2Nv
cGUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCByZWdUMik7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOwotfQotCi12b2lkIEpJVDo6ZW1pdEdldFZh
ckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2Fk
KQotewotICAgIHVpbnRwdHJfdCByYXdBZGRyZXNzID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
b3BlcmFuZCk7Ci0gICAgbG9hZDMyKGJpdHdpc2VfY2FzdDx2b2lkKj4ocmF3QWRkcmVzcyArIFRh
Z09mZnNldCksIHRhZyk7Ci0gICAgbG9hZDMyKGJpdHdpc2VfY2FzdDx2b2lkKj4ocmF3QWRkcmVz
cyArIFBheWxvYWRPZmZzZXQpLCBwYXlsb2FkKTsKLX0KLXZvaWQgSklUOjplbWl0R2V0VmFyRnJv
bUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnIHRhZywgR1BSUmVnIHBh
eWxvYWQpCi17Ci0gICAgbG9hZFB0cihvcGVyYW5kLCBwYXlsb2FkKTsKLSAgICBsb2FkMzIoQWRk
cmVzcyhwYXlsb2FkLCBUYWdPZmZzZXQpLCB0YWcpOwotICAgIGxvYWQzMihBZGRyZXNzKHBheWxv
YWQsIFBheWxvYWRPZmZzZXQpLCBwYXlsb2FkKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRHZXRDbG9z
dXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpCi17Ci0gICAg
ZW1pdExvYWQoc2NvcGUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAs
IEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNp
emVvZihSZWdpc3RlcikgKyBUYWdPZmZzZXQpLCByZWdUMSk7Ci0gICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFu
ZCAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDApOwotfQotCi12b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9wcm9maWxlZENvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7
Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVz
b2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9z
dHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwotICAgIAotICAgIGF1dG8g
ZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpIHsKLSAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgICAgICBj
YXNlIEdsb2JhbFByb3BlcnR5OgotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2so
c2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmpl
Y3Rpb24uCi0gICAgICAgICAgICBHUFJSZWcgYmFzZSA9IHJlZ1QyOwotICAgICAgICAgICAgR1BS
UmVnIHJlc3VsdFRhZyA9IHJlZ1QxOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWQg
PSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyBvZmZzZXQgPSByZWdUMzsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgbW92ZShyZWdUMCwgYmFzZSk7Ci0gICAgICAgICAgICBsb2FkMzIob3Bl
cmFuZFNsb3QsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAg
ICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVx
dWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwotICAgICAg
ICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7Ci0gICAg
ICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0aGlzKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBiYXNlKTsKLSAgICAgICAgICAgIG5lZzMyKG9mZnNldCk7Ci0gICAgICAgICAgICBsb2FkMzIo
QmFzZUluZGV4KGJhc2UsIG9mZnNldCwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnBheWxvYWQpICsgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0UGF5bG9hZCk7Ci0gICAgICAgICAgICBsb2FkMzIo
QmFzZUluZGV4KGJhc2UsIG9mZnNldCwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnRhZykgKyAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpLCByZXN1bHRUYWcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBHbG9iYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgotICAgICAg
ICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSwgcmVnVDApOwotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0g
ICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0
PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCByZWdUMSwgcmVnVDApOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNW
YWx1ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgICAgICBpZiAocmVz
b2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNrLgotICAgICAgICAgICAg
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBl
bWl0R2V0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90KTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICBj
YXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6
Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoK
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAg
ICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0
UHV0SW5mbywgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6
dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAg
IEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBm
YWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBpc05v
dEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5s
aW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJv
cGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0
YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1
dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQot
ICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNH
bG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0
eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5v
dEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBK
dW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAg
IG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0g
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0
cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBhZGRT
bG93Q2FzZShqdW1wKCkpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZl
VHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZShieXRlY29kZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7Ci0gICAgZW1pdFN0
b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9m
cm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
RnJvbVNjb3BlPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEZyb21T
Y29wZSwgZHN0LCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudElu
c3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVl
KiBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsK
LSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUo
c2V0KTsKLSAgICB1aW50cHRyX3QgcmF3QWRkcmVzcyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KG9wZXJhbmQpOwotICAgIHN0b3JlMzIocmVnVDEsIGJpdHdpc2VfY2FzdDx2b2lkKj4ocmF3QWRk
cmVzcyArIFRhZ09mZnNldCkpOwotICAgIHN0b3JlMzIocmVnVDAsIGJpdHdpc2VfY2FzdDx2b2lk
Kj4ocmF3QWRkcmVzcyArIFBheWxvYWRPZmZzZXQpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRH
bG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCi17
Ci0gICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgbG9hZFB0cihpbmRpcmVj
dFdhdGNocG9pbnRTZXQsIHJlZ1QyKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoKmluZGlyZWN0V2F0
Y2hwb2ludFNldCk7IC8vIEZJWE1FOiA/PwotICAgIGxvYWRQdHIoYWRkcmVzc09mT3BlcmFuZCwg
cmVnVDIpOwotICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDIsIFRhZ09mZnNldCkpOwot
ICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDIsIFBheWxvYWRPZmZzZXQpKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0
cl90IG9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQot
ewotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMywgcmVnVDIpOwotICAgIGVtaXRMb2FkKHNjb3Bl
LCByZWdUMSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlMzIo
cmVnVDMsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlh
YmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikgKyBUYWdPZmZzZXQpKTsKLSAgICBz
dG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0
T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpICsgUGF5bG9hZE9mZnNl
dCkpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
c2NvcGUgPSBieXRlY29kZS5tX3Njb3BlOwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWU7Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvOwotICAgIFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoq
IHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0
cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRh
Lm1fb3BlcmFuZCk7Ci0gICAgCi0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgewotICAgICAgICBzd2l0
Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2
YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0
dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJz
IHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDMsIHJlZ1Qy
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9w
ZXJhbmRTbG90LCByZWdUMSk7Ci0gICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAg
ICAgc3RvcmUzMihyZWdUMywgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAgICAg
ICAgICBzdG9yZTMyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAo
Zmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdsb2JhbFZhcjoKLSAg
ICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICBjYXNl
IEdsb2JhbExleGljYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBK
U1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX3Byb2ZpbGVk
Q29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwot
ICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxk
RmlsdGVyVmFsdWUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFZh
clJlYWRPbmx5Q2hlY2socmVzb2x2ZVR5cGUsIHJlZ1QwKTsKLSAgICAgICAgICAgIGlmICghaXNJ
bml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2
ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBuZWVk
IHRvIGRvIGEgVERaIGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2Ug
bmVlZCB0byBlbWl0IFREWiBjaGVja3Mgc3RhdGljYWxseS4KLSAgICAgICAgICAgICAgICBpZiAo
aW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZy
b21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCBy
ZWdUMSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
ZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90
KSwgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVt
cHR5KHJlZ1QxKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2Fk
Rm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVj
dChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0YWRhdGEu
bV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0
UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2
YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENs
b3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVy
VmFsdWUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1
cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNl
dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAgICAg
IGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgICAgIGNh
c2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAg
c3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExp
c3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVn
VDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBy
ZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9i
YWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVU
eXBlKSk7Ci0gICAgICAgIEp1bXAgaXNHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
ID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxMZXhpY2Fs
VmFyKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7IC8vIER5bmFtaWMsIGl0IGNhbiBo
YXBwZW4gaWYgd2UgYXR0ZW1wdCB0byBwdXQgYSB2YWx1ZSB0byBhbHJlYWR5LWluaXRpYWxpemVk
IGNvbnN0IGJpbmRpbmcuCi0KLSAgICAgICAgaXNHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7
Ci0gICAgICAgIGVtaXRDb2RlKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSA/
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNhbFZh
ciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBp
c0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBl
LCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVk
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBU
b0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKLSAg
ICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAv
LyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVy
dHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkp
OwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwot
ICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0
aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
cyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMubGluayh0aGlzKTsKLQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotCi0gICAgICAg
IHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZh
dWx0OgotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAg
IFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENv
ZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Ci0gICAgaWYgKHJlc29sdmVUeXBl
ID09IE1vZHVsZVZhcikgewotICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRo
aXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9tb2RlX3JlYWRv
bmx5X3Byb3BlcnR5X3dyaXRlX2Vycm9yKTsKLSAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBt
X3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgY3VycmVudEluc3RydWN0aW9uKTsK
LX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0g
Ynl0ZWNvZGUubV9hcmd1bWVudHM7Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
LQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
OwotICAgIAotICAgIGVtaXRMb2FkUGF5bG9hZChhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRl
eCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgVGFnT2Zmc2V0KSwgcmVzdWx0UmVn
cy50YWdHUFIoKSk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6
c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAr
IFBheWxvYWRPZmZzZXQpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Ci0gICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFN0b3JlKGRzdCwg
cmVzdWx0UmVncy50YWdHUFIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotfQotCi12b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQdXRUb0FyZ3VtZW50cz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0g
Ynl0ZWNvZGUubV9hcmd1bWVudHM7Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIAotICAg
IGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwot
ICAgIAotICAgIGVtaXRMb2FkUGF5bG9hZChhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBlbWl0TG9h
ZCh2YWx1ZSwgcmVnVDEsIHJlZ1QyKTsKLSAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1Qw
LCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPikgKyBUYWdPZmZzZXQpKTsKLSAgICBzdG9yZTMyKHJlZ1QyLCBBZGRy
ZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBQYXlsb2FkT2Zmc2V0KSk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
Ci0gICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwotCi0gICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBlbWl0TG9h
ZFBheWxvYWQoYmFzZSwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QyLCBKU0ludGVy
bmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkgKyBUYWdP
ZmZzZXQpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMiwg
SlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgp
ICsgUGF5bG9hZE9mZnNldCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRSZWdzKTsKLSAgICBlbWl0U3RvcmUoZHN0
LCByZXN1bHRSZWdzLnRhZ0dQUigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0SW50ZXJuYWxGaWVsZD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5t
X3ZhbHVlOwotICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLQotICAgIGVt
aXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7Ci0gICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCBy
ZWdUMik7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNJbnRlcm5hbEZpZWxk
T2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpICsgVGFnT2Zmc2V0KSk7
Ci0gICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0
SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpICsgUGF5bG9hZE9mZnNldCkpOwot
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1Bh
dGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2dldF9wcm9wZXJ0eV9l
bnVtZXJhdG9yKTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKLXsKLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgc2xvd19wYXRoX2VudW1lcmF0b3JfbmV4dCk7Ci0gICAgc2xvd1BhdGhDYWxsLmNh
bGwoKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU2xvd1BhdGhDYWxs
IHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJh
dG9yX2dldF9ieV92YWwpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJikKLXsKLSAgICBVTlJFQUNIQUJMRV9GT1Jf
UExBVEZPUk0oKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBKSVRTbG93UGF0
aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2Vu
dW1lcmF0b3JfaW5fYnlfdmFsKTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotfQotCi12b2lk
IEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhD
YWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudW1lcmF0b3JfaGFzX293
bl9wcm9wZXJ0eSk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCi0KLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQotI2VuZGlmIC8vIEVOQUJMRShK
SVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklU
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pTSW50ZXJmYWNlSklULmgKaW5kZXggN2Nh
MWI0ZTdjM2ZkMDg0ZGQyN2FjMzg1MDZhYTljNmFlZDk1ZGViMC4uZjE4NmZiODJiMWZmOTc4ZDhm
NjdhNGYwNTMzOGU5Y2ZiNGM4MjM3NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KU0ludGVyZmFjZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJ
bnRlcmZhY2VKSVQuaApAQCAtMzYsNyArMzYsNyBAQAogI2lmIEVOQUJMRShKSVQpCiAKIG5hbWVz
cGFjZSBKU0MgewotICAgIGNsYXNzIEpTSW50ZXJmYWNlSklUIDogcHVibGljIENDYWxsSGVscGVy
cywgcHVibGljIEdQUkluZm8sIHB1YmxpYyBGUFJJbmZvIHsKKyAgICBjbGFzcyBKU0ludGVyZmFj
ZUpJVCA6IHB1YmxpYyBDQ2FsbEhlbHBlcnMsIHB1YmxpYyBHUFJJbmZvLCBwdWJsaWMgSlNSSW5m
bywgcHVibGljIEZQUkluZm8gewogICAgIHB1YmxpYzoKIAogICAgICAgICBKU0ludGVyZmFjZUpJ
VChWTSogdm0gPSBudWxscHRyLCBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG51bGxwdHIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKaW5kZXggMjk3MTQ3
ZTFjNGMwOGRjY2Q1ZjdiNzg2NDExZDg1NWIyYTFkZTQ3Yy4uYjg0MGVjNTg1OWQ2MjAwNzFiNmQ4
OGM0M2JiOGU5OGI0NzI5ZTJjYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcApAQCAtNDEsOCArNDEsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
I2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKQEAgLTYxLDYgKzU5LDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQogICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgImhhbmRsZUV4Y2Vw
dGlvbiIpOwogfQogCisjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCisKIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJv
bGxiYWNrR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpAQCAtNzcs
MTQgKzc3LDIwIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxl
RXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrR2VuZXJhCiAgICAgcmV0dXJuIEZJTkFMSVpF
X0NPREUocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiaGFuZGxlRXhjZXB0aW9uV2l0aENh
bGxGcmFtZVJvbGxiYWNrIik7CiB9CiAKKyNlbmRpZgorCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25H
ZW5lcmF0b3IoVk0mIHZtKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7CiAKICNpZiBDUFUoWDg2
XzY0KQogICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMiAqIHNpemVv
ZihDUFVSZWdpc3RlcikpLCBYODZSZWdpc3RlcnM6OmVzcCk7Ci0jZWxpZiBDUFUoQVJNNjQpCisj
ZWxpZiBDUFUoQVJNNjQpIHx8IENQVShBUk1fVEhVTUIyKQogICAgIGppdC5wb3BQYWlyKENDYWxs
SGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6bGlua1JlZ2lzdGVy
KTsKKyNlbGlmIENQVShNSVBTKQorICAgIGppdC5wb3BQYWlyKENDYWxsSGVscGVyczo6ZnJhbWVQ
b2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6cmV0dXJuQWRkcmVzc1JlZ2lzdGVyKTsKKyNl
bHNlCisjICAgZXJyb3IgIk5vdCBpbXBsZW1lbnRlZCBvbiBwbGF0Zm9ybSIKICNlbmRpZgogCiAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGNvbnRpbnVhdGlvbiA9IGppdC5qdW1wKCk7CkBAIC05NSw2
ICsxMDEsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBvcFRodW5r
U3RhY2tQcmVzZXJ2ZXNBbmRIYW5kbGVFeGNlcHRpb25HZQogICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgInBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNB
bmRIYW5kbGVFeGNlcHRpb24iKTsKIH0KIAorI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQor
CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKFZNJiB2bSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKaW5kZXggMGY5ZjZlMmQzNmY2ZGQyM2UxODcy
NmFjZTYzMTRhMzBhMjAxZGJjZS4uMjI3OGU4MDRjZTA1NDRhN2JlNWE3OGE3ZTgzZmY1Y2FjZmRk
YzdkMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRv
cnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCkBA
IC0zNywxMiArMzcsMTIgQEAgY2xhc3MgVk07CiAKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5L
UykKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRp
b25HZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
aGFuZGxlRXhjZXB0aW9uV2l0aENhbGxGcmFtZVJvbGxiYWNrR2VuZXJhdG9yKFZNJik7Ci1NYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNB
bmRIYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKIAogI2VuZGlmIC8vIEVOQUJMRShFWFRS
QV9DVElfVEhVTktTKQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhh
bmRsZUV4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJh
dG9yKFZNJik7CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdGhyb3dF
eGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKFZNJik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444242</attachid>
            <date>2021-11-15 06:08:14 -0800</date>
            <delta_ts>2021-11-22 04:14:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232624-20211115140812.patch</filename>
            <type>text/plain</type>
            <size>230936</size>
            <attacher name="Geza Lore">glore</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1ODAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
MTM1NWUwY2NjYjcyYWRjZTAyYjc0YTAxMzZjOGMwZjIwZTEyNjIzLi5hZGE0ZTAxYjMzMDg1MjU1
Y2MwNWU3N2I5NTdkN2JjZDBhOGUxYjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMDggQEAKKzIwMjEtMTEtMTUgIEdlemEgTG9yZSAgPGdsb3JlQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0pTQ10gTWFrZSBzaGFyaW5nIG9mIHVubGlua2VkIGJhc2VsaW5lIGNvZGUgcG9z
c2libGUgb24gSlNWQUxVRTMyXzY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzI2MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIHBhdGNoIGNvbnRhaW5zIGEgZmV3IGRpZmZlcmVudCBjaGFuZ2Vz
LCB3aGljaCB0YWtlbiB0b2dldGhlciBtYWtlCisgICAgICAgIGl0IHBvc3NpYmxlIHRvIHNoYXJl
IHRoZSB1bmxpbmtlZCBiYXNlbGluZSBKSVQgY29kZSBiZXR3ZWVuIGRpZmZlcmVudAorICAgICAg
ICBDb2RlQmxvY2tzIG9uIEpTVkFMVUUzMl82NCBwbGF0Zm9ybXMuIE5vdGUgdGhhdCBieSBkZWZh
dWx0LCBjb2RlCisgICAgICAgIHNoYXJpbmcgaXMgZGlzYWJsZWQgb24gSlNWQUxVRTMyXzY0IGR1
ZSB0byB0aGUgaW5jcmVhc2VkIGV4ZWN1dGFibGUKKyAgICAgICAgbWVtb3J5IHVzYWdlIGl0IG1h
eSBjYXVzZS4gVGhlIHJlc29uIHRoZSBleGVjdXRhYmxlIG1lbW9yeSB1c2FnZSBtaWdodAorICAg
ICAgICBpbmNyZWFzZSBpcyB0aGF0IHRoZSBVbmxpbmtlZENvZGVCbG9jayBoYXMgYSBsb25nZXIg
bGlmZXRpbWUgdGhhbiB0aGUKKyAgICAgICAgY29ycmVzcG9uZGluZyBsaW5rZWQgQ29kZUJsb2Nr
cyAoZHVlIHRvIHRoZSBDb2RlQ2FjaGUgSSdtIHRvbGQpLCBhbmQKKyAgICAgICAgd2hlbiB1c2lu
ZyBjb2RlIHNoYXJpbmcsIGl0IGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBKSVRlZCBjb2RlLiBU
aGlzCisgICAgICAgIHRoZW4gcHJldmVudHMgcmVjeWNsaW5nIG9mIGV4ZWN1dGFibGUgbWVtb3J5
IHdoaWxlIHRoZQorICAgICAgICBVbmxpbmtlZENvZGVCbG9jayBpcyBsaXZlLCB3aGlsZSB3aXRo
b3V0IHNoYXJpbmcgd2UgY291bGQgaGF2ZQorICAgICAgICByZWNsYWltZWQgc29tZSBvZiB0aGUg
ZXhlY3V0YWJsZSBtZW1vcnkgZWFybGllci4KKworICAgICAgICBUaGUgaGlnaCBsZXZlbCBjaGFu
Z2VzIGluIHRoaXMgcGFjaCBhcmU6CisKKyAgICAgICAgMS4gQSBsb3Qgb2YgYmFzZWxpbmUgaW1w
bGVtZW50YXRpb25zIG9mIHRoZSBvcGNvZGVzIHRoYXQgbmVlZGVkCisgICAgICAgIGNoYW5naW5n
IGZvciB0aGUgdW5saW5rZWQgYmFzZWxpbmUgYXJlIG5vdyB1bmlmaWVkIGJldHdlZW4gdGhlCisg
ICAgICAgIEpTVkFMVUU2NCBhbmQgSlNWQUxVRTMyXzY0IHBsYXRmb3Jtcy4gTm90ZSB0aGF0IHdo
aWxlIHRoaXMgcmVxdWlyZWQKKyAgICAgICAgYWRkaW5nIHNvbWUgYWJzdHJhY3Rpb24sIHRoZSBj
b2RlIGdlbmVyYXRlZCBieSB0aGUgYmFzZWxpbmUgSklUIG9uCisgICAgICAgIEpTVkFMVUU2NCBz
aG91bGQgYmUgaWRlbnRpY2FsIHVzaW5nIHRoaXMgYWJzdHJhY3Rpb24gY29tcGFyZWQgdG8KKyAg
ICAgICAgYmVmb3JlLgorCisgICAgICAgIDIuIEkgYWRkZWQgYSBKU1JJbmZvIGNsYXNzIHdoaWNo
IGRlZmluZXMgc3RhbmRhcmQgbmFtZXMgZm9yIGNlcnRhaW4KKyAgICAgICAgSlNWYWx1ZVJlZyBp
bnN0YW5jZXMuIFRoaXMgZW5hYmxlcyBhIGxvdCBvZiB0aGUgdW5pZmljYXRpb24gaW4gdGhlCisg
ICAgICAgIHBvaW50IGFib3ZlIHRvIGJlIGV4cHJlc3NlZCBpbiBhIHZlcnkgc2ltcGxlIG1hbm5l
ciwgd2l0aCB2ZXJ5IGxpdHRsZQorICAgICAgICB0cmFuc2Zvcm1hdGlvbiBvZiB0aGUgZXhpc3Rp
bmcgY29kZS4gQWdhaW4sIHRoaXMgc2hvdWxkIGhhdmUgbm8gaW1wYWN0CisgICAgICAgIG9uIHRo
ZSBnZW5lcmF0ZWQgY29kZSBvbiBKU1ZBTFVFNjQsIGFwYXJ0IGZyb20gc29tZSByZWdpc3Rlcgor
ICAgICAgICBzdWJzdGl0dXRpb25zLgorCisgICAgICAgIDMuIFRoZSBzaXplcyBvZiB0aGUgcmVz
b2x2ZV9zY29wZSBhbmQgZ2V0X2Zyb21fc2NvcGUgb3BzIGluY3JlYXNlZAorICAgICAgICBzaWdu
aWZpY2FudGx5IHdpdGggdGhlIHVubGlua2VkIGJhc2VsaW5lLiBUaGlzIGNhbiBjYXVzZSBpc3N1
ZXMgb24KKyAgICAgICAgc29tZSBKU1ZBTFVFMzJfNjQgdGFyZ2V0cyB3aGVyZSBtZW1vcnkgaXMg
bW9yZSBwcmVjaW91cywgc28gZm9yIHRoZXNlCisgICAgICAgIHR3byBvcHMgSSBzd2FwcGVkIGlu
IHRoZSBpbXBsZW1lbnRhdGlvbnMgdW5kZXIgRVhUUkFfQ1RJX1RIVU5LUywgd2hpY2gKKyAgICAg
ICAgaW1wbGVtZW50IHRoZXNlIHVzaW5nIHNoYXJlZCBzdHVicy4gVGhlc2Ugc3R1YnMgd29yayBv
biBhbGwgcGxhdGZvcm1zCisgICAgICAgIHRoYXQgc3VwcG9ydCBFTkFCTEUoSklUKSwgc28gdGhl
eSBhcmUgbm93IHRoZSBvbmx5IGltcGxlbWVudGF0aW9uIGFuZAorICAgICAgICBJIGhhdmUgcmVt
b3ZlZCB0aGUgYmFzaWMgYmxvYXRlZCB2ZXJzaW9ucy4KKworICAgICAgICA0LiBSZW1vdmVkIHNv
bWUgdW51c2VkIGNvZGUgYW5kIGZpZWxkcyBJIGRpc2NvdmVyZWQgd2hpbGUgd29ya2luZyBvbgor
ICAgICAgICB0aGlzLCBzdHJpY3RseSBzcGVha2luZyB0aGlzIGlzIG5vdCBuZWNlc3NhcnkgZm9y
IHRoZSBmdW5jdGlvbmFsCisgICAgICAgIGNoYW5nZS4KKworICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6Cisg
ICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhl
bHBlcnM6OnN0b3JlVmFsdWUpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmlzTnVs
bCk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6aXNOb3ROdWxsKToKKyAgICAgICAg
KEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0VHVyblVuZGVmaW5lZEludG9OdWxsKToKKyAgICAg
ICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpub092ZXJsYXApOgorICAgICAgICAoSlNDOjpBc3Nl
bWJseUhlbHBlcnM6Om5vT3ZlcmxhcEltcGwpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6Om5vT3ZlcmxhcEltcGxSZWdNYXNrKToKKyAgICAgICAgKiBqaXQvR1BSSW5mby5oOgorICAg
ICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xv
d0Nhc2VzKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6
aW5nKToKKyAgICAgICAgKEpTQzo6SklUOjpsaW5rKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAg
ICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25l
ZEFuZEp1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZElt
cGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbW9kKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVV
bnNpZ25lZEFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdEJpbmFyeURvdWJsZU9wKToKKyAgICAgICAgKiBqaXQvSklUQXJpdGht
ZXRpYzMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Vuc2lnbmVkKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9kZWMpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3JldCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVNldHVwRnJhbWUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfaXRlcmF0b3Jfb3Blbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9u
ZXh0KToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6Omdl
dENvbnN0YW50T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQpOgorICAgICAgICAoSlNDOjpKSVQ6OmFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0VmlydHVhbFJlZ2lz
dGVyUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlclRh
Zyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWREb3VibGUpOgorICAgICAgICAoSlNDOjps
b2FkQWRkck9mQ29kZUJsb2NrQ29uc3RhbnRCdWZmZXIpOgorICAgICAgICAoSlNDOjpKSVQ6Omxv
YWRDb2RlQmxvY2tDb25zdGFudCk6CisgICAgICAgIChKU0M6OkpJVDo6bG9hZENvZGVCbG9ja0Nv
bnN0YW50UGF5bG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6bG9hZENvZGVCbG9ja0NvbnN0YW50
VGFnKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9tb3YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW5kKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdHlwZW9mX2lz
X3VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3Jf
bnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFsc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OnZh
bHVlSXNGYWxzZXlHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamVxX251
bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2plcV9wdHIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5l
cV9wdHIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXEpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfamVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2p0cnVlKToKKyAg
ICAgICAgKEpTQzo6SklUOjp2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21w
aWxlT3BTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1w
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
c3dpdGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX25lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3RvX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2xvb3BfaGludCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1
bmNDb21tb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZ2V0X2FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wcm90b3R5
cGVfb2YpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9p
bnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2VtcHR5KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfaXNfbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2NlbGxfd2l0
aF90eXBlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX29iamVjdCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfdG9fcHJvcGVydHlfa2V5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25vdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9qZXFfcHRyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFf
cHRyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXEpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcEVxSnVtcFNsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZXEpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGls
ZU9wU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RvX251bWJlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1lcmljKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF90b19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Bh
cmVudF9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnRlcik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9jaGVja190ZHopOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVPcFJlc29sdmVTY29w
ZVRodW5rKToKKyAgICAgICAgKEpTQzo6SklUOjpzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayk6CisgICAgICAgIChKU0M6
OkpJVDo6c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0
X2Zyb21fYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90b19hcmd1
bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
ZW51bWVyYXRvcl9pbl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVy
YXRvcl9oYXNfb3duX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0V3JpdGVCYXJy
aWVyKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogaml0L0pTSW50ZXJmYWNlSklULmg6CisgICAgICAgICogaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OnBvcFRodW5rU3RhY2tQcmVzZXJ2ZXNBbmRIYW5k
bGVFeGNlcHRpb25HZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuaDoK
KyAgICAgICAgKiBydW50aW1lL09wdGlvbnNMaXN0Lmg6CisKIDIwMjEtMTEtMTQgIFl1c3VrZSBT
dXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBVc2UgQ2FsbExpbmtJ
bmZvIGluIExMSW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDJmMWQyOTVlMmY0
MWFkMTVhMjE0ZWRmYzcyOWIxZGUwMzRlZDk2NjQuLmZkYzg4YmE0OGNkOGZlN2RmN2VmNDBlZTc2
MGE0YmJjOTYyM2NkYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00Nzg1LDcg
KzQ3ODUsNiBAQAogCQlBN0JGRjNCRjE3OTg2ODk0MDAwMkY0NjIgLyogREZHRmlsdHJhdGlvblJl
c3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGaWx0cmF0aW9uUmVz
dWx0Lmg7IHBhdGggPSBkZmcvREZHRmlsdHJhdGlvblJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBN0MwQzRBQTE2N0MwOENEMDAxNzAxMUQgLyogSlNTY3JpcHRSZWYuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTY3JpcHRSZWYuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0MwQzRBQjE2N0MwOENEMDAxNzAxMUQgLyog
SlNTY3JpcHRSZWZQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
U2NyaXB0UmVmUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBN0MxRThD
ODExMkU3MDFDMDBBMzdGOTggLyogSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdDMUVBRUIxNzk4N0FCNjAwMjk5REIyIC8q
IENMb29wU3RhY2tJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENM
b29wU3RhY2tJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QzFFQUVD
MTc5ODdBQjYwMDI5OURCMiAvKiBTdGFja1Zpc2l0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBsaW5lRW5kaW5nID0gMDsgcGF0aCA9IFN0YWNrVmlzaXRvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QzFFQUVEMTc5ODdBQjYwMDI5OURCMiAvKiBTdGFj
a1Zpc2l0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhY2tWaXNpdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NDIzLDcgKzY0MjIsNiBAQAogCQkJ
CTcyNkI5MUFGMjY1ODE2NTMwMDhFNkY4MiAvKiBKSVRQbGFuLmggKi8sCiAJCQkJNzIxMzFCRjYy
NjU4N0VGMjAwNzExNENGIC8qIEpJVFBsYW5TdGFnZS5oICovLAogCQkJCTg2Q0M4NUMzMEVFN0E4
OTQwMDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgKi8sCi0JCQkJQTdDMUU4QzgxMTJF
NzAxQzAwQTM3Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwICovLAogCQkJCUZFM0Ew
NkI4MUMxMTAzRDkwMDM5MEZERCAvKiBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmNwcCAqLywKIAkJ
CQlGRTNBMDZCOTFDMTEwM0Q5MDAzOTBGREQgLyogSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oICov
LAogCQkJCTcyMTMxQkYzMjY1ODdFRjIwMDcxMTRDRiAvKiBKSVRTYWZlcG9pbnQuY3BwICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IDc5M2Y0NmY3YmM1OGU1MDhjZGE2Y2I5MDE1
YWEwOTJlOGM5ODYwZDkuLjg2YjYwMjQ5ODEwZmQwYTIyYzIzMmY5YTMxNWNkOGQ1OGFiNTQ1MzIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAgLTY2MCw3ICs2NjAsNiBAQCBqaXQvSklU
T3Bjb2RlczMyXzY0LmNwcAogaml0L0pJVE9wZXJhdGlvbnMuY3BwCiBqaXQvSklUUGxhbi5jcHAK
IGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKLWppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cAogaml0L0pJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuY3BwCiBqaXQvSklUU2FmZXBvaW50LmNwcAog
aml0L0pJVFNpemVTdGF0aXN0aWNzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmgKaW5kZXggYTQ0YWE1Y2Y5NTRmMmMxNjU0NzllYzJkY2Q5MjNkNWZmNGYz
ZDFmOC4uOTg3MmQ1NjlkNDMzYjllMjc0ZGFkM2MzMmVjNWMzYjM0ZGRhOTc4MCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC0yNzYsNyArMjc2LDE3
IEBAIHB1YmxpYzoKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIodmFsdWUucGF5bG9hZCgpKSwg
cmVncy5wYXlsb2FkR1BSKCkpOwogI2VuZGlmCiAgICAgfQotICAgIAorCisgICAgdm9pZCBzdG9y
ZVZhbHVlKEpTVmFsdWUgdmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICAgICAgc3RvcmU2NChJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwg
YWRkcmVzcyk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBzdG9yZTMyKEltbTMy
KHZhbHVlLnRhZygpKSwgYWRkcmVzcy53aXRoT2Zmc2V0KFRhZ09mZnNldCkpOworICAgICAgICBz
dG9yZTMyKEltbTMyKHZhbHVlLnBheWxvYWQoKSksIGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2Fk
T2Zmc2V0KSk7CisjZW5kaWYKKyAgICB9CisKICAgICB2b2lkIHN0b3JlVHJ1c3RlZFZhbHVlKEpT
VmFsdWUgdmFsdWUsIEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
QEAgLTEwNjMsNiArMTA3MywyNCBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKKyAgICB2b2lk
IGlzTnVsbChKU1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgZHN0KQorICAgIHsKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgICAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ3MucGF5bG9hZEdQUigpLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVOdWxsKSwgZHN0KTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJf
NjQpCisgICAgICAgIGNvbXBhcmUzMihFcXVhbCwgcmVncy50YWdHUFIoKSwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6Ok51bGxUYWcpLCBkc3QpOworI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBpc05v
dE51bGwoSlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVnIGRzdCkKKyAgICB7CisjaWYgVVNFKEpTVkFM
VUU2NCkKKyAgICAgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdzLnBheWxvYWRHUFIoKSwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIGRzdCk7CisjZWxpZiBVU0UoSlNWQUxVRTMy
XzY0KQorICAgICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpOdWxsVGFnKSwgZHN0KTsKKyNlbmRpZgorICAgIH0KKwogICAgIEp1bXAg
YnJhbmNoSWZOdWxsKEdQUlJlZyBncHIpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0x
MTMyLDYgKzExNjAsMTcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYnJhbmNoVGVzdFB0ciha
ZXJvLCBzdHJpbmdJbXBsR1BSLCBUcnVzdGVkSW1tMzIoSlNTdHJpbmc6OmlzUm9wZUluUG9pbnRl
cikpOwogICAgIH0KIAorICAgIHZvaWQgZW1pdFR1cm5VbmRlZmluZWRJbnRvTnVsbChKU1ZhbHVl
UmVncyByZWdzKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzdGF0aWNfYXNz
ZXJ0KChKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCAmIH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpID09
IEpTVmFsdWU6OlZhbHVlTnVsbCk7CisgICAgICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgcmVncy5wYXlsb2FkR1BSKCkpOworI2VsaWYgVVNFKEpTVkFMVUUz
Ml82NCkKKyAgICAgICAgc3RhdGljX2Fzc2VydCgoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnIHwgMSkg
PT0gSlNWYWx1ZTo6TnVsbFRhZyk7CisgICAgICAgIG9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdz
LnRhZ0dQUigpKTsKKyNlbmRpZgorICAgIH0KKwogICAgIHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NG
b3JCeXRlT2Zmc2V0KHB0cmRpZmZfdCBieXRlT2Zmc2V0KQogICAgIHsKICAgICAgICAgcmV0dXJu
IEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGJ5dGVPZmZzZXQpOwpAQCAtMTg2
Myw2ICsxOTAyLDQ5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBzdG9yZVdhc21Db250ZXh0
SW5zdGFuY2VOZWVkc01hY3JvU2NyYXRjaFJlZ2lzdGVyKCk7CiAjZW5kaWYKIAorICAgIC8vIENo
ZWNrcyB0aGF0IHRoZSBnaXZlbiBsaXN0IG9mIEdQUlJlZ3MgYW5kIEpTVmFsdWVSZWdzIGRvIG5v
dCBvdmVybGFwLiBVc2UgdGhpcyBpbiBzdGF0aWMKKyAgICAvLyBhc3NlcnRpb25zIHRvIGVuc3Vy
ZSB0aGF0IHJlZ2lzdGVyIGFsaWFzZXMgbGl2ZSBhdCB0aGUgc2FtZSBwb2ludCBkbyBub3QgbWFw
IHRvIHRoZSBzYW1lCisgICAgLy8gYXJjaGl0ZWN0dXJhbCByZWdpc3Rlci4KKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbm9PdmVybGFw
KEFyZ3MuLi4gYXJncykgeyByZXR1cm4gbm9PdmVybGFwSW1wbCgwLCBhcmdzLi4uKTsgfQorCitw
cml2YXRlOgorICAgIC8vIEJhc2UgY2FzZQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdz
PgorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBub092ZXJsYXBJbXBsKHVpbnQ2NF90KSB7IHJl
dHVybiB0cnVlOyB9CisKKyAgICAvLyBHUFJSZWcgY2FzZQorICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZS4uLiBBcmdzPgorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBub092ZXJsYXBJbXBsKHVpbnQ2
NF90IHVzZWQsIFJlZ2lzdGVySUQgZ3ByLCBBcmdzLi4uIGFyZ3MpCisgICAgeworICAgICAgICB1
bnNpZ25lZCBtYXNrID0gbm9PdmVybGFwSW1wbFJlZ01hc2soZ3ByKTsKKyAgICAgICAgaWYgKHVz
ZWQgJiBtYXNrKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbm9P
dmVybGFwSW1wbCh1c2VkIHwgbWFzaywgYXJncy4uLik7CisgICAgfQorCisgICAgLy8gSlNWYWx1
ZVJlZ3MgY2FzZQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzPgorICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBub092ZXJsYXBJbXBsKHVpbnQ2NF90IHVzZWQsIEpTVmFsdWVSZWdzIGpz
ciwgQXJncy4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbWFzayA9IG5vT3Zlcmxh
cEltcGxSZWdNYXNrKGpzci5wYXlsb2FkR1BSKCkpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisg
ICAgICAgIG1hc2sgfD0gbm9PdmVybGFwSW1wbFJlZ01hc2soanNyLnRhZ0dQUigpKTsKKyNlbmRp
ZgorICAgICAgICBpZiAodXNlZCAmIG1hc2spCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiBub092ZXJsYXBJbXBsKHVzZWQgfCBtYXNrLCBhcmdzLi4uKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG5vT3ZlcmxhcEltcGxSZWdNYXNrKFJl
Z2lzdGVySUQgZ3ByKQorICAgIHsKKyAgICAgICAgaWYgKGdwciA9PSBJbnZhbGlkR1BSUmVnKQor
ICAgICAgICAgICAgcmV0dXJuIDBVTEw7CisgICAgICAgIHVuc2lnbmVkIGJpdCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihncHIpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChiaXQgPCBzaXplb2Yo
dWludDY0X3QpICogQ0hBUl9CSVQpOworICAgICAgICByZXR1cm4gMVVMTCA8PCBiaXQ7CisgICAg
fQorCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxs
ZWVTYXZlc0J1ZmZlckltcGwoR1BSUmVnIGNhbGxlZVNhdmVzQnVmZmVyKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0dQUkluZm8uaAppbmRleCBmZDkwOTVkM2ZiNzc1NWZkNGRjNzA0MTljN2VhY2Zi
NGY3NTZjNmU0Li4yZjhlNTQ0NzNmNzIxM2M5MmQ4ODZhMTk2YWUyYzkxYzFlNDQ2ZGM5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaApAQCAtOTIzLDEzICs5MjMsNDMgQEAgcHVibGlj
OgogCiAjZW5kaWYgLy8gQ1BVKFJJU0NWNjQpCiAKKy8vIFRvIG1ha2Ugc29tZSBjb2RlIGdlbmVy
aWMgb3ZlciBib3RoIEpTVkFMVUU2NCBhbmQgSlNWQUxVRTMyXzY0IHBsYXRmb3Jtcywgd2UgdXNl
IHN0YW5kYXJkIG5hbWVzCisvLyBmb3IgY2VydGFpbiBKU1ZhbHVlUmVncyBpbnN0YW5jZXMuIE9u
IEpTVkFMVUU2NCwgYSBKU1ZhbHVlUmVncyBjb3JyZXNwb25kcyB0byBhIHNpbmdsZSA2NC1iaXQK
Ky8vIGFyY2hpdGVjdHVyYWwgR1BSLCB3aGlsZSBvbiBKU1ZBTFVFMzJfNjQsIGEgSlNWYWx1ZVJl
Z3MgY29ycmVzcG9uZHMgdG8gYSBwYWlyIG9mIDMyLWJpdAorLy8gYXJjaGl0ZWN0dXJhbCBHUFJz
LiBOZXZlcnRoZWxlc3MsIGEgbG90IG9mIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHRhcmdl
dHMgY2FuIGJlIGFic3RyYWN0ZWQKKy8vIG92ZXIgdXNpbmcgdGhlIGZvbGxvd2luZyBhbGlhc2Vz
LiBTZWUgQXNzZW1ibHlIZWxwZXI6Om5vT3ZlcmxhcCBmb3IgY2F0Y2hpbmcgY29uZmxpY3Rpbmcg
cmVnaXN0ZXIKKy8vIGFsaWFzaW5nIHN0YXRpY2FsbHkuCitjbGFzcyBKU1JJbmZvIHsKK3B1Ymxp
YzoKKyAgICAvLyBUZW1wb3JhcnkgcmVnaXN0ZXJzLgorICAgIC8vIE9uIEpTVkFMVUU2NCwganNS
ZWdUezIqbisxfXsyKm59IGFsd2F5cyBtYXBzIG9uZS10by1vbmUgdG8gR1BSIHJlZ1R7MipufQor
ICAgIC8vIE9uIEpTVkFMVUUzMl82NCwganNSZWdUezIqbisxfXsyKm59IGFsd2F5cyBtYXBzIHRv
IHRoZSBHUFIgcGFpciByZWdUezIqbisxfSAvIHJlZ1R7MipufQorICAgIC8vIFRoaXMgbWFwcGlu
ZyBpcyBkZWxpYmVyYXRlbHkgc2ltcGxlIHRvIGVhc2UgcmVhc29uaW5nIGFib3V0IGFsaWFzaW5n
LiBFLmcuOgorICAgIC8vIFNlZWluZyAnanNSZWdUMTAnIGluZGljYXRlcyB0aGF0IGluIGdlbmVy
YWwgYm90aCAncmVnVDEnIGFuZCAncmVnVDAnIG1heSBiZSB1c2VkLgorI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgc3RhdGljIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBqc1JlZ1QxMCB7IEdQUkluZm86
OnJlZ1QwIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBqc1JlZ1QzMiB7IEdQ
UkluZm86OnJlZ1QyIH07CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHN0YXRpYyBjb25z
dGV4cHIgSlNWYWx1ZVJlZ3MganNSZWdUMTAgeyBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVn
VDAgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIEpTVmFsdWVSZWdzIGpzUmVnVDMyIHsgR1BSSW5m
bzo6cmVnVDMsIEdQUkluZm86OnJlZ1QyIH07CisjZW5kaWYKKworICAgIC8vIFJldHVybiB2YWx1
ZSByZWdpc3RlcgorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgc3RhdGljIGNvbnN0ZXhwciBKU1Zh
bHVlUmVncyByZXR1cm5WYWx1ZUpTUiB7IEdQUkluZm86OnJldHVyblZhbHVlR1BSIH07CisjZWxp
ZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmV0
dXJuVmFsdWVKU1IgeyBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZh
bHVlR1BSIH07CisjZW5kaWYKK307CisKIC8vIFRoZSBiYXNlbGluZSBKSVQgdXNlcyAiYWNjdW11
bGF0b3IiIHN0eWxlIGV4ZWN1dGlvbiB3aXRoIHJlZ1QwIChmb3IgNjQtYml0KQogLy8gYW5kIHJl
Z1QwICsgcmVnVDEgKGZvciAzMi1iaXQpIHNlcnZpbmcgYXMgdGhlIGFjY3VtdWxhdG9yIHJlZ2lz
dGVyKHMpIGZvcgogLy8gcGFzc2luZyByZXN1bHRzIG9mIG9uZSBvcGNvZGUgdG8gdGhlIG5leHQu
IEhlbmNlOgotQ09NUElMRV9BU1NFUlQoR1BSSW5mbzo6cmVnVDAgPT0gR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIHJlZ1QwX211c3RfZXF1YWxfcmV0dXJuVmFsdWVHUFIpOworc3RhdGljX2Fzc2Vy
dChHUFJJbmZvOjpyZWdUMCA9PSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAjaWYgVVNFKEpT
VkFMVUUzMl82NCkKLUNPTVBJTEVfQVNTRVJUKEdQUkluZm86OnJlZ1QxID09IEdQUkluZm86OnJl
dHVyblZhbHVlR1BSMiwgcmVnVDFfbXVzdF9lcXVhbF9yZXR1cm5WYWx1ZUdQUjIpOworc3RhdGlj
X2Fzc2VydChHUFJJbmZvOjpyZWdUMSA9PSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwogI2Vu
ZGlmCitzdGF0aWNfYXNzZXJ0KEpTUkluZm86OmpzUmVnVDEwID09IEpTUkluZm86OnJldHVyblZh
bHVlSlNSKTsKIAogaW5saW5lIEdQUlJlZyBleHRyYWN0UmVzdWx0KEdQUlJlZyByZXN1bHQpIHsg
cmV0dXJuIHJlc3VsdDsgfQogI2lmIFVTRShKU1ZBTFVFNjQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKaW5kZXggMjhhZTZmNzcwZGRhY2Q3MWM2ZjE4MmM5ZDE3OWZkMWNjZWI4ZGZiYy4uMGM2
YmYzZDFlNzUwNjM2YjgwNzAwMDQ4NDRlZDNlNTM2MzMwM2E4MSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcApAQCAtNjQxLDkgKzY0MSw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9kZWxfYnlfdmFsKQogICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZGVsX2J5X2lkKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3Bfc3ViKQotI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLSAgICAgICAg
REVGSU5FX1NMT1dDQVNFX09QKG9wX2dldF9mcm9tX3Njb3BlKQotI2VuZGlmCiAgICAgICAgIERF
RklORV9TTE9XQ0FTRV9PUChvcF9wdXRfdG9fc2NvcGUpCiAKICAgICAgICAgREVGSU5FX1NMT1dD
QVNFX09QKG9wX2l0ZXJhdG9yX29wZW4pCkBAIC04MTIsMTMgKzgwOSw4IEBAIHZvaWQgSklUOjpj
b21waWxlQW5kTGlua1dpdGhvdXRGaW5hbGl6aW5nKEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9y
dCkKICAgICAgICAgICAgICAgICBpZiAobV91bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3Rv
cigpICYmICFhcmd1bWVudCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgaW50IG9mZnNldCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdU
aGlzKGFyZ3VtZW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyB7IHJlZ1QwIH07Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICAgICAg
ICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXN1bHRSZWdzIHsgcmVnVDEsIHJlZ1QwIH07Ci0j
ZW5kaWYKLSAgICAgICAgICAgICAgICBsb2FkVmFsdWUoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rl
ciwgb2Zmc2V0KSwgcmVzdWx0UmVncyk7Ci0gICAgICAgICAgICAgICAgc3RvcmVWYWx1ZShyZXN1
bHRSZWdzLCBBZGRyZXNzKHJlZ1QyLCBhcmd1bWVudCAqIHNpemVvZihWYWx1ZVByb2ZpbGUpICsg
VmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKKyAgICAgICAgICAgICAgICBs
b2FkVmFsdWUoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSwganNSZWdUMTApOwor
ICAgICAgICAgICAgICAgIHN0b3JlVmFsdWUoanNSZWdUMTAsIEFkZHJlc3MocmVnVDIsIGFyZ3Vt
ZW50ICogc2l6ZW9mKFZhbHVlUHJvZmlsZSkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RC
dWNrZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTAxNSwxMSAr
MTAwNyw3IEBAIHZvaWQgSklUOjpsaW5rKCkKICAgICBtX2ppdENvZGUtPm1faml0Q29kZU1hcCA9
IGppdENvZGVNYXBCdWlsZGVyLmZpbmFsaXplKCk7CiAgICAgbV9qaXRDb2RlLT5hZG9wdE1hdGhJ
Q3MobV9tYXRoSUNzKTsKICAgICBtX2ppdENvZGUtPm1fY29uc3RhbnRQb29sID0gV1RGTW92ZSht
X2NvbnN0YW50UG9vbCk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICBtX2ppdENvZGUtPm1faXNT
aGFyZWFibGUgPSBtX2lzU2hhcmVhYmxlOwotI2Vsc2UKLSAgICBtX2ppdENvZGUtPm1faXNTaGFy
ZWFibGUgPSBmYWxzZTsKLSNlbmRpZgogCiAgICAgaWYgKEpJVEludGVybmFsOjp2ZXJib3NlKQog
ICAgICAgICBkYXRhTG9nRigiSklUIGdlbmVyYXRlZCBjb2RlIGZvciAlcCBhdCBbJXAsICVwKS5c
biIsIG1fdW5saW5rZWRDb2RlQmxvY2ssIHJlc3VsdC5leGVjdXRhYmxlTWVtb3J5KCktPnN0YXJ0
KCkudW50YWdnZWRQdHIoKSwgcmVzdWx0LmV4ZWN1dGFibGVNZW1vcnkoKS0+ZW5kKCkudW50YWdn
ZWRQdHIoKSk7CkBAIC0xMDc2LDcgKzEwNjQsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVF
eGNlcHRpb25IYW5kbGVycygpCiAgICAgfQogCiAgICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrcy5l
bXB0eSgpKSB7Ci0gICAgICAgIG1fZXhjZXB0aW9uSGFuZGxlciA9IGxhYmVsKCk7CiAgICAgICAg
IG1fZXhjZXB0aW9uQ2hlY2tzLmxpbmsodGhpcyk7CiAKICAgICAgICAgY29weUNhbGxlZVNhdmVz
VG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCmluZGV4IDY3YjQzZDhmYTMwYjcyY2JkNDk0NDYyMjhjNjQyOTY0ZjNk
MzM1MTUuLmQ2MzA2NmY3OTA3MDA0NzJjOTk2M2VjODM1MDc3MWMyY2FkNGMwY2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaApAQCAtMjUzLDcgKzI1MywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCBsb2FkQ29uc3RhbnQodW5zaWduZWQgY29uc3RhbnRJbmRleCwgR1BSUmVnKTsK
ICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGxvYWRHbG9iYWxPYmplY3QoR1BSUmVnKTsKLSAg
ICAgICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcp
OworICAgICAgICB2b2lkIGxvYWRDb2RlQmxvY2tDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIsIEpT
VmFsdWVSZWdzKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICB2b2lkIGxvYWRDb2Rl
QmxvY2tDb25zdGFudFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKTsKKyAgICAg
ICAgdm9pZCBsb2FkQ29kZUJsb2NrQ29uc3RhbnRUYWcoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3Rl
cklEKTsKKyNlbmRpZgogCiAgICAgICAgIHZvaWQgZW1pdFB1dENvZGVCbG9ja1RvRnJhbWVJblBy
b2xvZ3VlKEdQUlJlZyByZXN1bHQgPSByZWdUMCk7CiAKQEAgLTM0Nyw5ICszNTEsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIFByaXZh
dGVGaWVsZFB1dEtpbmQgcHJpdmF0ZUZpZWxkUHV0S2luZChPcCk7CiAKLSAgICAgICAgZW51bSBG
aW5hbE9iamVjdE1vZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07Ci0KICAgICAgICAg
dm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVS
ZWdzIGRzdCk7CisgICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoVmly
dHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpOwogICAgICAgICB2b2lkIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3Mgc3JjKTsKICAg
ICAgICAgdm9pZCBlbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyLCBjb25zdCBKU1ZhbHVlIGNvbnN0
YW50LCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7CiAKQEAgLTM2MCwzMyAr
MzYzLDI1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGdldE9wZXJhbmRDb25zdGFu
dEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBWaXJ0dWFsUmVn
aXN0ZXImIG9wLCBpbnQzMl90JiBjb25zdGFudCk7CiAKICAgICAgICAgdm9pZCBlbWl0TG9hZERv
dWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7Ci0gICAgICAgIHZvaWQg
ZW1pdExvYWRUYWcoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZyk7Ci0gICAgICAgIHZv
aWQgZW1pdExvYWRQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkKTsK
IAotICAgICAgICB2b2lkIGVtaXRMb2FkKGNvbnN0IEpTVmFsdWUmIHYsIFJlZ2lzdGVySUQgdGFn
LCBSZWdpc3RlcklEIHBheWxvYWQpOwotICAgICAgICB2b2lkIGVtaXRMb2FkKFZpcnR1YWxSZWdp
c3RlciwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNl
ID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRMb2FkMihWaXJ0dWFsUmVn
aXN0ZXIsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwgVmlydHVhbFJlZ2lz
dGVyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpOworICAgICAgICB2b2lk
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCB0
YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCk7CisgICAgICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdp
c3RlclRhZyhWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCk7CiAKICAgICAgICAg
dm9pZCBlbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJ
RCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAg
IHZvaWQgZW1pdFN0b3JlSW50MzIoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQs
IGJvb2wgaW5kZXhJc0ludDMyID0gZmFsc2UpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZUludDMy
KFZpcnR1YWxSZWdpc3RlciwgVHJ1c3RlZEltbTMyIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMy
ID0gZmFsc2UpOwogICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoVmlydHVhbFJlZ2lzdGVyLCBS
ZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0NlbGwgPSBmYWxzZSk7CiAgICAgICAgIHZv
aWQgZW1pdFN0b3JlQm9vbChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9v
bCBpbmRleElzQm9vbCA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVEb3VibGUoVmly
dHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQgdmFsdWUpOwogCiAgICAgICAgIHZvaWQgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIHZvaWQgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcp
OwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEKTsK
IAotICAgICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90UGF0aChjb25zdCBJZGVudGlmaWVyKik7
Ci0KICAgICAgICAgLy8gQXJpdGhtZXRpYyBvcGNvZGUgaGVscGVycwogICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IElu
c3RydWN0aW9uICosIE9wZXJhbmRUeXBlcywgSnVtcExpc3QmIG5vdEludDMyT3AxLCBKdW1wTGlz
dCYgbm90SW50MzJPcDIsIGJvb2wgb3AxSXNJblJlZ2lzdGVycyA9IHRydWUsIGJvb2wgb3AySXNJ
blJlZ2lzdGVycyA9IHRydWUpOwogCiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAg
ICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0
ZXJJRCBkc3QpOwotICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxS
ZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdp
c3RlcklEIGRzdDIpOwogICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOwogICAgICAgICB2b2lkIGVt
aXRTdG9yZUNlbGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29s
IC8qIG9ubHkgdXNlZCBpbiBKU1ZhbHVlMzJfNjQgKi8gPSBmYWxzZSkKICAgICAgICAgewpAQCAt
NDAyLDkgKzM5Nyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNl
SWZOb3ROdW1iZXIoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQgc2NyYXRjaCk7Ci0KLSAg
ICAgICAgdm9pZCBjb21waWxlR2V0QnlJZEhvdFBhdGgoVmlydHVhbFJlZ2lzdGVyIGJhc2VSZWcs
IGNvbnN0IElkZW50aWZpZXIqKTsKLQogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKICAg
ICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoSlNWYWx1ZVJlZ3MpOwpAQCAt
NjQ2LDkgKzYzOCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRf
ZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSNpZiAhRU5BQkxFKEVYVFJB
X0NUSV9USFVOS1MpCi0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0jZW5k
aWYKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAKICAgICAgICAgdm9pZCBl
bWl0U2xvd0Nhc2VDYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYsIFNsb3dQYXRoRnVuY3Rpb24pOwpAQCAtNjcwLDIxICs2NTksOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVk
c1ZhckluamVjdGlvbkNoZWNrcywgR1BSUmVnKTsKICAgICAgICAgdm9pZCBlbWl0VmFyUmVhZE9u
bHlDaGVjayhSZXNvbHZlVHlwZSwgR1BSUmVnIHNjcmF0Y2hHUFIpOwotICAgICAgICB2b2lkIGVt
aXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKTsKLSAgICAg
ICAgdm9pZCBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUs
IFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
IHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyk7Ci0g
ICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJh
bmQsIEdQUlJlZyk7Ci0jZWxzZQotICAgICAgICB2b2lkIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQ
b2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9hZCk7Ci0g
ICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJl
ZyB0YWcsIEdQUlJlZyBwYXlsb2FkKTsKLSNlbmRpZgotICAgICAgICB2b2lkIGVtaXRHZXRDbG9z
dXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOwogICAgICAg
ICB2b2lkIGVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0Kik7CiAgICAgICAgIHZvaWQgZW1p
dE5vdGlmeVdyaXRlV2F0Y2hwb2ludChHUFJSZWcgcG9pbnRlclRvU2V0KTsKLSAgICAgICAgdm9p
ZCBlbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7Ci0gICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcmlh
YmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIFZpcnR1YWxSZWdpc3RlciB2
YWx1ZSwgV2F0Y2hwb2ludFNldCoqKTsKLSAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihW
aXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKIAogICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyKTsKIApAQCAtNzM1LDE0ICs3MTEsMTMgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
dmFsdWVJc0ZhbHNleUdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2YWx1ZUlzVHJ1dGh5R2VuZXJhdG9yKFZNJik7Ci0K
KyNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAgICAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfZnJvbV9zY29wZUdl
bmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBzbG93X29wX3Jlc29sdmVfc2NvcGVHZW5lcmF0b3IoVk0mKTsKICAgICAgICAg
dGVtcGxhdGUgPFJlc29sdmVUeXBlPgogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mKTsKICAg
ICAgICAgdGVtcGxhdGUgPFJlc29sdmVUeXBlPgogICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZW5lcmF0ZU9wUmVzb2x2ZVNjb3BlVGh1bmsoVk0m
KTsKLSNlbmRpZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogICAgICAgICBKdW1wIGdl
dFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiAgICAgICAg
IHsKQEAgLTk4OSw5ICs5NjQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKdW1wTGlz
dCBtX2V4Y2VwdGlvbkNoZWNrczsKICAgICAgICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3NX
aXRoQ2FsbEZyYW1lUm9sbGJhY2s7Ci0jaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAg
ICAgICBMYWJlbCBtX2V4Y2VwdGlvbkhhbmRsZXI7Ci0jZW5kaWYKIAogICAgICAgICB1bnNpZ25l
ZCBtX2dldEJ5SWRJbmRleCB7IFVJTlRfTUFYIH07CiAgICAgICAgIHVuc2lnbmVkIG1fZ2V0QnlW
YWxJbmRleCB7IFVJTlRfTUFYIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVEFyaXRobWV0aWMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0
aG1ldGljLmNwcAppbmRleCA4ZjFhN2M1YjgzNDYxMGFhMGI4YWZjODMxN2I5MWNkZTAxNzRlNmIz
Li44ZjRkODBiOTljZmM5ZTkxZmUyMzNkNGJlOTI2ZjU2MzdmNjZlYzZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKQEAgLTIxMCw3ICsyMTAsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmly
dHVhbFJlZ2lzdGVyIG9wMiwgdW5zaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMiwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CiAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QxKTsKIApAQCAtMjM4LDcgKzIzOSw4IEBAIHZv
aWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBv
cDEsIFZpcnR1YWxSZWdpc3RlciBvCiAgICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3BlcmFu
ZENvbnN0YW50SW50KG9wMSk7CiAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25k
aXRpb24pLCByZWdUMSwgSW1tMzIob3AxaW1tKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7Cisg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMSk7CiAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIo
Y29uZGl0aW9uLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwogICAgIH0KIH0KQEAgLTI2NCw3ICsy
NjYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKFZpcnR1YWxSZWdpc3Rl
ciBkc3QsIFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcgogICAgICAgICBpbnQzMl90IG9wMWltbSA9
IGdldE9wZXJhbmRDb25zdGFudEludChvcDEpOwogICAgICAgICBjb21wYXJlMzIoY29tbXV0ZShj
b25kaXRpb24pLCByZWdUMCwgSW1tMzIob3AxaW1tKSwgcmVnVDApOwogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEpOwor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwogICAgICAgICBjb21wYXJlMzIoY29uZGl0
aW9uLCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKICAgICB9CiAgICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKQEAgLTQyMiw3ICs0MjUsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBBU1NF
UlQocmVnVDQgIT0gZWR4KTsKICAgICBBU1NFUlQocmVnVDQgIT0gZWN4KTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDQsIG9wMiwgZWN4KTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDQpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCBlY3gpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUNCk7CiAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KGVjeCk7CiAKQEAgLTQ4MCw3ICs0ODQsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0
aW9uYWxDb25kaXRpbwogCiAgICAgLy8gQ2hhcmFjdGVyIGxlc3MuCiAgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50Q2hhcihvcDEpKSB7Ci0gICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDEsIHJlZ1Qw
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QxLCByZWdUMCk7CiAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMSkpOwogICAgICAgICBKdW1w
TGlzdCBmYWlsdXJlczsKICAgICAgICAgZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcocmVnVDAsIHJl
Z1QwLCBmYWlsdXJlcyk7CkBAIC00ODksNyArNDkzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0
aW8KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFy
KG9wMikpIHsKLSAgICAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAgICAgICAgIEp1bXBMaXN0IGZhaWx1cmVz
OwogICAgICAgICBlbWl0TG9hZENoYXJhY3RlclN0cmluZyhyZWdUMCwgcmVnVDAsIGZhaWx1cmVz
KTsKQEAgLTQ5OCwxNSArNTAyLDE2IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvCiAgICAgICAg
IHJldHVybjsKICAgICB9IAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0g
ICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAgICAgIG5vdEludDMyT3AyLmFwcGVu
ZChicmFuY2hJZk5vdEludDMyKHJlZ1QzKSk7CiAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29t
bXV0ZShjb25kaXRpb24pLCByZWdUMiwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJ
bnQzMigpKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChv
cDIpKSB7Ci0gICAgICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgICAgIG5vdEludDMy
T3AxLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1QxKSk7CiAgICAgICAgIGFkZEp1bXAoYnJh
bmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikuYXNJ
bnQzMigpKSksIHRhcmdldCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdExvYWQyKG9wMSwg
cmVnVDEsIHJlZ1QwLCBvcDIsIHJlZ1QzLCByZWdUMik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCByZWdUMSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICAgICAgbm90SW50MzJPcDEuYXBwZW5kKGJyYW5j
aElmTm90SW50MzIocmVnVDEpKTsKICAgICAgICAgbm90SW50MzJPcDIuYXBwZW5kKGJyYW5jaElm
Tm90SW50MzIocmVnVDMpKTsKICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJl
Z1QwLCByZWdUMiksIHRhcmdldCk7CkBAIC01MzMsMTMgKzUzOCwxNCBAQCB2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
UmVsYXRpb25hbAogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50
KG9wMSkpIHsKLSAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICAgICAgYWRkSnVt
cChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QyLCBJbW0zMihnZXRDb25zdGFudE9w
ZXJhbmQob3AxKS5hc0ludDMyKCkpKSwgdGFyZ2V0KTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFu
ZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDAp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAg
ICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihnZXRDb25zdGFu
dE9wZXJhbmQob3AyKS5hc0ludDMyKCkpKSwgdGFyZ2V0KTsKICAgICB9IGVsc2UgewotICAgICAg
ICBlbWl0TG9hZDIob3AxLCByZWdUMSwgcmVnVDAsIG9wMiwgcmVnVDMsIHJlZ1QyKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMywgcmVnVDIpOwogICAgICAgICBhZGRKdW1w
KGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsKICAgICB9CiB9CkBA
IC01NTMsMTMgKzU1OSwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aQogICAgIFZpcnR1YWxS
ZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFu
dEludChvcDEpKSB7Ci0gICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QzLCByZWdUMik7CiAgICAgICAgIGNv
bXBhcmUzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QyLCBJbW0zMihnZXRDb25zdGFudE9wZXJh
bmQob3AxKS5hc0ludDMyKCkpLCByZWdUMCk7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25z
dGFudEludChvcDIpKSB7Ci0gICAgICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgICAg
IGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihnZXRDb25zdGFudE9wZXJhbmQob3Ay
KS5hc0ludDMyKCkpLCByZWdUMCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdExvYWQyKG9w
MSwgcmVnVDEsIHJlZ1QwLCBvcDIsIHJlZ1QzLCByZWdUMik7CisgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AxLCByZWdUMSwgcmVnVDApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwg
cmVnVDAsIHJlZ1QyLCByZWdUMCk7CiAgICAgfQogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdU
MCk7CkBAIC01NzUsOCArNTgyLDggQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93
KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW8KIAogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7
Ci0gICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByZWdUMywgcmVnVDIpOwogICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDQpOwogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVz
dDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CkBA
IC02MDQsNyArNjExLDcgQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcChjb25zdCBJbnN0
cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIE9wZXJhbmRUeXBlcyB0eXBlcywKICAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxv
d2VzdFRhZykpKTsKIAogICAgICAgICBpZiAoIW9wMklzSW5SZWdpc3RlcnMpCi0gICAgICAgICAg
ICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMiwgcmVnVDMsIHJlZ1QyKTsKIAogICAgICAgICBKdW1wIGRvdWJsZU9wMiA9
IGJyYW5jaDMyKEJlbG93LCByZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykp
OwogCkBAIC02NjgsNyArNjc1LDcgQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcChjb25z
dCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIE9wZXJhbmRUeXBlcyB0eXBlcywKICAgICAgICAg
QVNTRVJUKG9wMklzSW5SZWdpc3RlcnMpOwogCiAgICAgICAgIGlmICghb3AxSXNJblJlZ2lzdGVy
cykKLSAgICAgICAgICAgIGVtaXRMb2FkUGF5bG9hZChvcDEsIHJlZ1QwKTsKKyAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKG9wMSwgcmVnVDApOwogCiAgICAgICAgIGNv
bnZlcnRJbnQzMlRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwCmluZGV4IDIyNWUxNGExYmUwOGFi
ZDU1MGFkNjNjNDVlYjUxYTFjNDYyZTFjMjAuLjJkZGJjYjMwNjhiZWQ5Yjc1ODc0NTgxM2RjNTU0
M2VlZTk4ZDVhM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJp
dGhtZXRpYzMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMzMl82NC5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWdu
ZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKLSAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdU
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAg
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RJbnQzMihyZWdUMSkpOwogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwgVHJ1c3RlZEltbTMyKDApKSk7CkBAIC01OSw3
ICs1OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2luYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5jPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0Rz
dDsKIAotICAgIGVtaXRMb2FkKHNyY0RzdCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDEsIHJlZ1QwKTsKIAogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90SW50MzIocmVnVDEpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVy
ZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwpAQCAtNzEsNyArNzEsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Q7CiAKLSAgICBlbWl0TG9h
ZChzcmNEc3QsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNE
c3QsIHJlZ1QxLCByZWdUMCk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKHJl
Z1QxKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0z
MigxKSwgcmVnVDApKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCmluZGV4IDU3
MTk2MTIxNTYwYTNhMjlhZTNkMjA3MTEzYzYwZGNlNjA4MGQ2MzIuLjExN2RmYWMwNTA2Nzk1MDM2
YzUwNGIzYzcyMDQ1NTVhNGIwNWQyMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcApAQCAtNDMsMTggKzQzLDEyIEBACiBuYW1lc3BhY2UgSlNDIHsKIAogbmFtZXNwYWNlIHsK
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXR1cm5WYWx1
ZUpTUiB7IEdQUkluZm86OnJldHVyblZhbHVlR1BSIH07Ci0gICAgY29uc3RleHByIEpTVmFsdWVS
ZWdzIGNhbGxlZUpTUiB7IEdQUkluZm86OnJlZ1QwIH07Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0
KQotICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyByZXR1cm5WYWx1ZUpTUiB7IEdQUkluZm86OnJl
dHVyblZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIgfTsKLSAgICBjb25zdGV4cHIg
SlNWYWx1ZVJlZ3MgY2FsbGVlSlNSIHsgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwIH07
Ci0jZW5kaWYKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgY2FsbGVlSlNSID0gSlNSSW5mbzo6
anNSZWdUMTA7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIHN0YXRpY19hc3NlcnQoIXJldHVyblZhbHVlSlNS
LnVzZXMoY2FsbEZyYW1lUmVnaXN0ZXIpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChy
ZXR1cm5WYWx1ZUpTUiwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKIAogICAgIC8vIFJldHVybiB0aGUg
cmVzdWx0IGluIHJldHVyblZhbHVlR1BSIChyZXR1cm5WYWx1ZUdQUjIvcmV0dXJuVmFsdWVHUFIg
b24gMzItYml0KS4KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFJldD4oKTsKQEAgLTE0NSwyMCArMTM5LDE0IEBAIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29u
c3QgT3AmIGJ5dGVjb2RlKQogI2VuZGlmCiAKICAgICB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIGFyZ3VtZW50c0pTUiB7IHJlZ1QyIH07Ci0jZWxp
ZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3MgYXJndW1l
bnRzSlNSIHsgcmVnVDMsIHJlZ1QyIH07Ci0jZW5kaWYKLQotICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGFyZ3VtZW50cywgYXJndW1lbnRzSlNSKTsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihhcmd1bWVudHMsIGpzUmVnVDMyKTsKICAgICAgICAgRl9KSVRPcGVyYXRpb25f
R0ZKWlogc2V0dXBPcGVyYXRpb247CiAgICAgICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBv
cGVyYXRpb25TZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZTsKICAgICAg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24oc2V0dXBP
cGVyYXRpb24sIHJlZ1Q0LCByZWdUMSwgYXJndW1lbnRzSlNSLCBmaXJzdFZhckFyZ09mZnNldCwg
cmVnVDApOworICAgICAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCByZWdUNCwgcmVn
VDEsIGpzUmVnVDMyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOwogICAgICAgICBtb3ZlKHJl
dHVyblZhbHVlR1BSLCByZWdUNSk7CiAgICAgfQogCkBAIC0xNzEsNyArMTU5LDcgQEAgSklUOjpj
b21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUpCiAgICAgbm90QmlnZ2VzdC5saW5r
KHRoaXMpOwogICAgIAogICAgIC8vIEluaXRpYWxpemUgJ3RoaXMnLgotICAgIGNvbnN0ZXhwciBK
U1ZhbHVlUmVncyB0aGlzSlNSID0gY2FsbGVlSlNSOyAvLyBVc2VkIGFzIHRlbXBvcmFyeSByZWdp
c3RlcgorICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyB0aGlzSlNSID0ganNSZWdUMTA7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVmFsdWUsIHRoaXNKU1IpOwogICAgIHN0b3JlVmFs
dWUodGhpc0pTUiwgQWRkcmVzcyhyZWdUNSwgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQo
KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKIApAQCAtMjg4LDcgKzI3
Niw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kCiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQog
ICAgIC8vIFdlIG5lZWQgdGhpcyBvbiBKU1ZBTFVFMzJfNjQgb25seSBhcyBvbiBKU1ZBTFVFNjQg
YSBwb2ludGVyIGNvbXBhcmlzb24gaW4gdGhlIERhdGFJQyBmYXN0Ci0gICAgLy8gcGF0Y2ggY2F0
Y2hlcyB0aGlzLgorICAgIC8vIHBhdGggY2F0Y2hlcyB0aGlzLgogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90Q2VsbChjYWxsZWVKU1IpKTsKICNlbmRpZgogCkBAIC00NTMsNyArNDQxLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24pCiAgICAgdXNpbmcgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpyZXN1bHRKU1I7CiAg
ICAgdXNpbmcgQmFzZWxpbmVHZXRCeUlkUmVnaXN0ZXJzOjpzdHViSW5mb0dQUjsKIAotICAgIHN0
YXRpY19hc3NlcnQoIXJldHVyblZhbHVlSlNSLnVzZXMoc3R1YkluZm9HUFIpKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KG5vT3ZlcmxhcChyZXR1cm5WYWx1ZUpTUiwgc3R1YkluZm9HUFIpKTsKICAgICBz
dGF0aWNfYXNzZXJ0KHJldHVyblZhbHVlSlNSID09IGJhc2VKU1IpOyAvLyBPdGhlcndpc2Ugd2ls
bCBuZWVkIG1vdmUocmV0dXJuVmFsdWVKU1IsIGJhc2VKU1IpCiAgICAgc3RhdGljX2Fzc2VydChi
YXNlSlNSID09IHJlc3VsdEpTUik7CiAKQEAgLTU1OCw3ICs1NDYsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKICAgICBh
ZHZhbmNlVG9OZXh0Q2hlY2twb2ludCgpOwogCiAgICAgLy8gY2FsbCByZXN1bHQgKHsgZG9uZSwg
dmFsdWUgfSBKU09iamVjdCkgaW4gcmVnVDAgIChyZWdUMS9yZWdUMCBvciAzMi1iaXQpCi0gICAg
c3RhdGljX2Fzc2VydCghcmV0dXJuVmFsdWVKU1IudXNlcyhzdHViSW5mb0dQUikpOworICAgIHN0
YXRpY19hc3NlcnQobm9PdmVybGFwKHJlc3VsdEpTUiwgc3R1YkluZm9HUFIpKTsKIAogICAgIGNv
bnN0ZXhwciBKU1ZhbHVlUmVncyBpdGVyQ2FsbFJlc3VsdEpTUiA9IGRvbnRDbG9iYmVySlNSOwog
ICAgIG1vdmVWYWx1ZVJlZ3MocmV0dXJuVmFsdWVKU1IsIGl0ZXJDYWxsUmVzdWx0SlNSKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKaW5kZXggZDYwMmZjOTI2YzkzMjllMjEy
YTRkNTA3ZmQ4NmQwNzhhYmE3YmExYS4uZGI4MTkwN2Y5YjA0NDBmNjdiZmNkODYyZGM4YTRlMjhj
ZjliODU0YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKQEAgLTY1LDEy
ICs2NSw4IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzS25vd25DZWxsKFZpcnR1YWxSZWdp
c3RlciBzcmMpCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgSklUOjpnZXRDb25zdGFudE9wZXJhbmQo
VmlydHVhbFJlZ2lzdGVyIHNyYykKIHsKICAgICBBU1NFUlQoc3JjLmlzQ29uc3RhbnQoKSk7Ci0j
aWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICByZXR1cm4gbV9wcm9maWxlZENvZGVCbG9jay0+Z2V0
Q29uc3RhbnQoc3JjKTsKLSNlbHNlCiAgICAgUkVMRUFTRV9BU1NFUlQobV91bmxpbmtlZENvZGVC
bG9jay0+Y29uc3RhbnRTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oc3JjKSAhPSBTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOwogICAgIHJldHVybiBtX3VubGlua2Vk
Q29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotI2VuZGlmCiB9CiAKIEFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFZp
cnR1YWxSZWdpc3RlciBlbnRyeSkKQEAgLTE2NywzNSArMTYzLDIyIEBAIEFMV0FZU19JTkxJTkUg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNr
T25FeGNlcHRpCiBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8
Q0Z1bmN0aW9uUHRyVGFnPiBmdW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKIHsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhm
dW5jdGlvbik7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmV0dXJuVmFsdWVHUFIpOwotI2Vsc2UKLSAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5W
YWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKLSNlbmRpZgorICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUpTUik7CiAgICAgcmV0dXJuIGNhbGw7CiB9CiAKIEFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0KEFkZHJlc3MgZnVuY3Rpb24sIFZpcnR1YWxSZWdpc3RlciBkc3QpCiB7CiAgICAgYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7Ci0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwotI2Vsc2UK
LSAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKTsKLSNl
bmRpZgorICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUpTUik7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJ5dGVjb2RlPgogQUxXQVlTX0lOTElORSBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVz
dWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVjb2RlLCBjb25zdCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KGZ1bmN0aW9uKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlR1BSKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmV0dXJuVmFsdWVHUFIpOwotI2Vsc2UKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLCBKU1ZhbHVlUmVncyhyZXR1cm5WYWx1ZUdQUjIsIHJldHVyblZhbHVlR1BSKSk7
Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmV0dXJuVmFsdWVHUFIyLCByZXR1cm5WYWx1ZUdQUik7Ci0j
ZW5kaWYKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXR1cm5WYWx1ZUpT
Uik7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlSlNSKTsKICAg
ICByZXR1cm4gY2FsbDsKIH0KIApAQCAtMjAzLDEzICsxODYsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBCeXRlY29kZT4KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoY29uc3QgQnl0ZWNvZGUmIGJ5dGVj
b2RlLCBBZGRyZXNzIGZ1bmN0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogewogICAgIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmV0dXJuVmFsdWVHUFIpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci0jZWxzZQotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJldHVyblZhbHVl
R1BSMiwgcmV0dXJuVmFsdWVHUFIpKTsKLSAgICBlbWl0U3RvcmUoZHN0LCByZXR1cm5WYWx1ZUdQ
UjIsIHJldHVyblZhbHVlR1BSKTsKLSNlbmRpZgorICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUsIHJldHVyblZhbHVlSlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmV0dXJuVmFsdWVKU1IpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xv
d0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBW
aXJ0dWFsUmVnaXN0ZXIgcmVnKQpAQCAtMzMyLDEyICszMTAsNyBAQCBBTFdBWVNfSU5MSU5FIGJv
b2wgSklUOjppc09wZXJhbmRDb25zdGFudENoYXIoVmlydHVhbFJlZ2lzdGVyIHNyYykKIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRl
Y2x0eXBlKE9wOjpNZXRhZGF0YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZv
aWQ+IEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNv
ZGUpCiB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyByZXN1bHQgeyByZWdU
MCB9OwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyByZXN1bHQgeyByZWdUMSwgcmVnVDAgfTsKLSNl
bmRpZgotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdCk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwganNSZWdUMTApOwogfQogCiBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4uLikgeyB9
CkBAIC0zNDksMTIgKzMyMiw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShjb25zdCBCeXRlY29kZSYgYnl0ZWNvZGUsIEpTVmFsdWVSZWdzIHZhCiAgICAgICAgIHJl
dHVybjsKIAogICAgIHB0cmRpZmZfdCBvZmZzZXQgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5tZXRh
ZGF0YSgpLm9mZnNldEluTWV0YWRhdGFUYWJsZShieXRlY29kZSkgKyB2YWx1ZVByb2ZpbGVPZmZz
ZXRGb3I8Qnl0ZWNvZGU+KG1fYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpICsgVmFsdWVQcm9m
aWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzdG9y
ZTY0KHZhbHVlLmdwcigpLCBBZGRyZXNzKHNfbWV0YWRhdGFHUFIsIG9mZnNldCkpOwotI2Vsc2UK
LSAgICBzdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBv
ZmZzZXQgKyBQYXlsb2FkT2Zmc2V0KSk7Ci0gICAgc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgQWRk
cmVzcyhzX21ldGFkYXRhR1BSLCBvZmZzZXQgKyBUYWdPZmZzZXQpKTsKLSNlbmRpZgorICAgIHN0
b3JlVmFsdWUodmFsdWUsIEFkZHJlc3Moc19tZXRhZGF0YUdQUiwgb2Zmc2V0KSk7CiB9CiAKICNp
ZiBVU0UoSlNWQUxVRTY0KQpAQCAtMzk1LDc5ICszNjMsODUgQEAgQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEluaXRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQogICAgIHN0b3JlVHJ1
c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIGFkZHJlc3NGb3IoZHN0KSk7CiB9CiAKK0FMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNy
YywgSlNWYWx1ZVJlZ3MgZHN0KQoreworICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgpOyAvLyBU
aGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2Vu
ZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgorICAgIGlmIChzcmMuaXND
b25zdGFudCgpKSB7CisgICAgICAgIGlmIChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pc0NvbnN0YW50
T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKHNyYykpCisgICAgICAgICAgICBtb3ZlVmFsdWUobV91
bmxpbmtlZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKSwgZHN0KTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywgZHN0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihzcmMpLCBkc3QpOworfQorCitB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlciBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCit7CisgICAgc3RvcmVWYWx1ZShmcm9tLCBhZGRy
ZXNzRm9yKGRzdCkpOworfQorCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKK0FMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVn
aXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCkKK3sKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywgSlNWYWx1ZVJlZ3MgeyB0YWcsIHBheWxvYWQgfSk7Cit9CisKK0FMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKFZpcnR1YWxSZWdp
c3RlciBzcmMsIFJlZ2lzdGVySUQgZHN0KQoreworICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXgp
OyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBh
dGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgorICAgIGlmIChz
cmMuaXNDb25zdGFudCgpKSB7CisgICAgICAgIGlmIChtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pc0Nv
bnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKHNyYykpCisgICAgICAgICAgICBtb3ZlKElt
bTMyKG1fdW5saW5rZWRDb2RlQmxvY2stPmdldENvbnN0YW50KHNyYykucGF5bG9hZCgpKSwgZHN0
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50UGF5bG9h
ZChzcmMsIGRzdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbG9hZDMyKHBheWxvYWRG
b3Ioc3JjKSwgZHN0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1
YWxSZWdpc3RlclRhZyhWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKK3sKKyAg
ICBBU1NFUlQobV9ieXRlY29kZUluZGV4KTsgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGR1cmluZyBob3QvY29sZCBwYXRoIGdlbmVyYXRpb24sIHNvIHRoYXQgbV9ieXRlY29k
ZUluZGV4IGlzIHNldC4KKyAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAo
bV9wcm9maWxlZENvZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhz
cmMpKQorICAgICAgICAgICAgbW92ZShJbW0zMihtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25z
dGFudChzcmMpLnRhZygpKSwgZHN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9hZENv
ZGVCbG9ja0NvbnN0YW50VGFnKHNyYywgZHN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBsb2FkMzIodGFnRm9yKHNyYyksIGRzdCk7Cit9CisjZWxpZiBVU0UoSlNWQUxVRTY0KQorQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIgc3JjLCBSZWdpc3RlcklEIGRzdCkKK3sKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YywgSlNWYWx1ZVJlZ3MgeyBkc3QgfSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVy
SUQgZHN0KQoreworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBKU1ZhbHVlUmVncyB7
IGRzdCB9KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3RlcklEIGZyb20pCit7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QsIEpTVmFsdWVSZWdzIHsgZnJvbSB9KTsKK30KKyNlbmRpZgor
CisKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91
YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKIHsKICAgICBpZiAo
cmVnLmlzQ29uc3RhbnQoKSkgeworICAgICAgICBBU1NFUlQobV9wcm9maWxlZENvZGVCbG9jay0+
aXNDb25zdGFudE93bmVkQnlVbmxpbmtlZENvZGVCbG9jayhyZWcpKTsKICAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPmNv
bnN0YW50UmVnaXN0ZXIocmVnKTsKICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZp
bkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKICAgICAgICAgbG9hZERvdWJsZShh
ZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFRh
ZyhWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZykKLXsKLSAgICBpZiAocmVnLmlz
Q29uc3RhbnQoKSkgewotICAgICAgICBtb3ZlKEltbTMyKGdldENvbnN0YW50T3BlcmFuZChyZWcp
LnRhZygpKSwgdGFnKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGxvYWQzMih0YWdG
b3IocmVnKSwgdGFnKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFBheWxvYWQoVmly
dHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkKQotewotICAgIGlmIChyZWcuaXND
b25zdGFudCgpKSB7Ci0gICAgICAgIG1vdmUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKHJlZyku
cGF5bG9hZCgpKSwgcGF5bG9hZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBsb2Fk
MzIocGF5bG9hZEZvcihyZWcpLCBwYXlsb2FkKTsKLX0KLQotaW5saW5lIHZvaWQgSklUOjplbWl0
TG9hZChjb25zdCBKU1ZhbHVlJiB2LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2Fk
KQotewotICAgIG1vdmUoSW1tMzIodi5wYXlsb2FkKCkpLCBwYXlsb2FkKTsKLSAgICBtb3ZlKElt
bTMyKHYudGFnKCkpLCB0YWcpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRzdCkKLXsK
LSAgICBlbWl0TG9hZChzcmMsIGRzdC50YWdHUFIoKSwgZHN0LnBheWxvYWRHUFIoKSk7Ci19Ci0K
LUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyIGRzdCwgSlNWYWx1ZVJlZ3MgZnJvbSkKLXsKLSAgICBlbWl0U3RvcmUoZHN0LCBmcm9t
LnRhZ0dQUigpLCBmcm9tLnBheWxvYWRHUFIoKSk7Ci19Ci0KLWlubGluZSB2b2lkIEpJVDo6ZW1p
dExvYWQoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5
bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQotewotICAgIFJFTEVBU0VfQVNTRVJUKHRhZyAhPSBwYXls
b2FkKTsKLQotICAgIGlmIChiYXNlID09IGNhbGxGcmFtZVJlZ2lzdGVyKSB7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKHBheWxvYWQgIT0gYmFzZSk7Ci0gICAgICAgIGVtaXRMb2FkUGF5bG9hZChy
ZWcsIHBheWxvYWQpOwotICAgICAgICBlbWl0TG9hZFRhZyhyZWcsIHRhZyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAocGF5bG9hZCA9PSBiYXNlKSB7IC8vIGF2b2lkIHN0b21w
aW5nIGJhc2UKLSAgICAgICAgbG9hZDMyKHRhZ0ZvcihyZWcsIGJhc2UpLCB0YWcpOwotICAgICAg
ICBsb2FkMzIocGF5bG9hZEZvcihyZWcsIGJhc2UpLCBwYXlsb2FkKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGxvYWQzMihwYXlsb2FkRm9yKHJlZywgYmFzZSksIHBheWxvYWQpOwot
ICAgIGxvYWQzMih0YWdGb3IocmVnLCBiYXNlKSwgdGFnKTsKLX0KLQotaW5saW5lIHZvaWQgSklU
OjplbWl0TG9hZDIoVmlydHVhbFJlZ2lzdGVyIHJlZzEsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0
ZXJJRCBwYXlsb2FkMSwgVmlydHVhbFJlZ2lzdGVyIHJlZzIsIFJlZ2lzdGVySUQgdGFnMiwgUmVn
aXN0ZXJJRCBwYXlsb2FkMikKLXsKLSAgICBlbWl0TG9hZChyZWcyLCB0YWcyLCBwYXlsb2FkMik7
Ci0gICAgZW1pdExvYWQocmVnMSwgdGFnMSwgcGF5bG9hZDEpOwotfQogCiBpbmxpbmUgdm9pZCBK
SVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0
ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UpCiB7CkBAIC00ODIsMTMgKzQ1Niw2IEBAIGlu
bGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50MzIoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0
ZXJJRCBwYXlsb2FkLCBib29sIGluCiAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkludDMyVGFnKSwgdGFnRm9yKHJlZykpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRT
dG9yZUludDMyKFZpcnR1YWxSZWdpc3RlciByZWcsIFRydXN0ZWRJbW0zMiBwYXlsb2FkLCBib29s
IGluZGV4SXNJbnQzMikKLXsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnKSk7
Ci0gICAgaWYgKCFpbmRleElzSW50MzIpCi0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKHJlZykpOwotfQotCiBpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRTdG9yZUNlbGwoVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29s
IGluZGV4SXNDZWxsKQogewogICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5bG9hZEZvcihyZWcpKTsK
QEAgLTUwMywxMSArNDcwLDYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVCb29sKFZpcnR1
YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmQKICAgICAgICAgc3Rv
cmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIHRhZ0ZvcihyZWcpKTsKIH0K
IAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVEb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywg
RlBSZWdpc3RlcklEIHZhbHVlKQotewotICAgIHN0b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9y
KHJlZykpOwotfQotCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIg
cmVnLCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdpc3RlcklEIGJhc2UpCiB7CiAgICAgc3Rv
cmUzMihJbW0zMihjb25zdGFudC5wYXlsb2FkKCkpLCBwYXlsb2FkRm9yKHJlZywgYmFzZSkpOwpA
QCAtNTUzLDQ0ICs1MTUsNiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpnZXRPcGVyYW5kQ29u
c3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdAogCiAjZWxzZSAvLyBV
U0UoSlNWQUxVRTMyXzY0KQogCi0vLyBnZXQgYXJnIHB1dHMgYW4gYXJnIGZyb20gdGhlIFNGIHJl
Z2lzdGVyIGFycmF5IGludG8gYSBoL3cgcmVnaXN0ZXIKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBk
c3QpCi17Ci0gICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleCk7IC8vIFRoaXMgbWV0aG9kIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0
IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCi0KLSAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkgewot
ICAgICAgICBpZiAobV9wcm9maWxlZENvZGVCbG9jay0+aXNDb25zdGFudE93bmVkQnlVbmxpbmtl
ZENvZGVCbG9jayhzcmMpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV91bmxpbmtl
ZENvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAgICAgICAgIG1vdmUoSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKHZhbHVlKSksIGRzdCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
bG9hZENvZGVCbG9ja0NvbnN0YW50KHNyYywgZHN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGxvYWQ2NChhZGRyZXNzRm9yKHNyYyksIGRzdCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgSlNW
YWx1ZVJlZ3MgZHN0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBkc3QucGF5
bG9hZEdQUigpKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoVmlydHVhbFJlZ2lzdGVyIHNyYzEsIFJlZ2lzdGVySUQgZHN0MSwgVmlydHVhbFJl
Z2lzdGVyIHNyYzIsIFJlZ2lzdGVySUQgZHN0MikKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYzEsIGRzdDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgZHN0Mik7
Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmly
dHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQotewotICAgIHN0b3JlNjQoZnJvbSwg
YWRkcmVzc0Zvcihkc3QpKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBKU1ZhbHVlUmVncyBmcm9tKQotewot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBmcm9tLnBheWxvYWRHUFIoKSk7Ci19Ci0K
IEFMV0FZU19JTkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZkJvdGhKU0NlbGxzKFJlZ2lz
dGVySUQgcmVnMSwgUmVnaXN0ZXJJRCByZWcyLCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7CiAgICAg
bW92ZShyZWcxLCBzY3JhdGNoKTsKQEAgLTcyNSwxNCArNjQ5LDM0IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmxvYWRHbG9iYWxPYmplY3QoR1BSUmVnIHJlc3VsdCkKICAgICBsb2FkQ29uc3Rh
bnQobV9nbG9iYWxPYmplY3RDb25zdGFudCwgcmVzdWx0KTsKIH0KIAotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6bG9hZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25zdGFudCwg
R1BSUmVnIHJlc3VsdCkKK0FMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgbG9hZEFkZHJPZkNvZGVC
bG9ja0NvbnN0YW50QnVmZmVyKEpJVCAmaml0LCBHUFJSZWcgZHN0KQoreworICAgIGppdC5sb2Fk
UHRyKGppdC5hZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGRzdCk7CisgICAg
aml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGRzdCwgQ29kZUJsb2NrOjpvZmZzZXRPZkNvbnN0YW50
c1ZlY3RvckJ1ZmZlcigpKSwgZHN0KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bG9h
ZENvZGVCbG9ja0NvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBjb25zdGFudCwgSlNWYWx1ZVJlZ3Mg
ZHN0KQogewogICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50LmlzQ29uc3RhbnQoKSk7Ci0gICAg
bG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHJlc3VsdCk7Ci0g
ICAgbG9hZFB0cihBZGRyZXNzKHJlc3VsdCwgQ29kZUJsb2NrOjpvZmZzZXRPZkNvbnN0YW50c1Zl
Y3RvckJ1ZmZlcigpKSwgcmVzdWx0KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0LCBjb25z
dGFudC50b0NvbnN0YW50SW5kZXgoKSAqIHNpemVvZih2b2lkKikpLCByZXN1bHQpOworICAgIGxv
YWRBZGRyT2ZDb2RlQmxvY2tDb25zdGFudEJ1ZmZlcigqdGhpcywgZHN0LnBheWxvYWRHUFIoKSk7
CisgICAgbG9hZFZhbHVlKEFkZHJlc3MoZHN0LnBheWxvYWRHUFIoKSwgY29uc3RhbnQudG9Db25z
dGFudEluZGV4KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgZHN0KTsKIH0KIAorI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsb2FkQ29kZUJsb2NrQ29uc3RhbnRQ
YXlsb2FkKFZpcnR1YWxSZWdpc3RlciBjb25zdGFudCwgUmVnaXN0ZXJJRCBkc3QpCit7CisgICAg
UkVMRUFTRV9BU1NFUlQoY29uc3RhbnQuaXNDb25zdGFudCgpKTsKKyAgICBsb2FkQWRkck9mQ29k
ZUJsb2NrQ29uc3RhbnRCdWZmZXIoKnRoaXMsIGRzdCk7CisgICAgbG9hZDMyKEFkZHJlc3MoZHN0
LCBjb25zdGFudC50b0NvbnN0YW50SW5kZXgoKSAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2Fk
T2Zmc2V0KSwgZHN0KTsKK30KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxvYWRDb2RlQmxvY2tD
b25zdGFudFRhZyhWaXJ0dWFsUmVnaXN0ZXIgY29uc3RhbnQsIFJlZ2lzdGVySUQgZHN0KQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50LmlzQ29uc3RhbnQoKSk7CisgICAgbG9hZEFkZHJP
ZkNvZGVCbG9ja0NvbnN0YW50QnVmZmVyKCp0aGlzLCBkc3QpOworICAgIGxvYWQzMihBZGRyZXNz
KGRzdCwgY29uc3RhbnQudG9Db25zdGFudEluZGV4KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgVGFn
T2Zmc2V0KSwgZHN0KTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApp
bmRleCAyZmUyM2M0OWZkMGY5NDA5MWY2ODYwNWI3NTdhZTJjZTMyMjAxNGEyLi40YzJmMzJkYWRi
NWUzYWJkZGFiYjI5Y2NkNmJiNDZmZjA5ZDlkZDMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTQ1LDggKzQ1LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LSNpZiBVU0UoSlNWQUxVRTY0KQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE1vdj4oKTsKQEAgLTU1LDI2ICs1MywyMyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAg
IGlmIChzcmMuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIGlmIChtX3Byb2ZpbGVkQ29kZUJsb2Nr
LT5pc0NvbnN0YW50T3duZWRCeVVubGlua2VkQ29kZUJsb2NrKHNyYykpIHsKLSAgICAgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBtX3VubGlua2VkQ29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwot
ICAgICAgICAgICAgc3RvcmU2NChJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgYWRkcmVz
c0Zvcihkc3QpKTsKKyAgICAgICAgICAgIHN0b3JlVmFsdWUobV91bmxpbmtlZENvZGVCbG9jay0+
Z2V0Q29uc3RhbnQoc3JjKSwgYWRkcmVzc0Zvcihkc3QpKTsKICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudChzcmMsIHJlZ1QwKTsKLSAgICAgICAgICAg
IHN0b3JlNjQocmVnVDAsIGFkZHJlc3NGb3IoZHN0KSk7CisgICAgICAgICAgICBsb2FkQ29kZUJs
b2NrQ29uc3RhbnQoc3JjLCBqc1JlZ1QxMCk7CisgICAgICAgICAgICBzdG9yZVZhbHVlKGpzUmVn
VDEwLCBhZGRyZXNzRm9yKGRzdCkpOwogICAgICAgICB9Ci0KICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGxvYWQ2NChhZGRyZXNzRm9yKHNyYyksIHJlZ1QwKTsKLSAgICBzdG9yZTY0KHJl
Z1QwLCBhZGRyZXNzRm9yKGRzdCkpOworICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKHNyYyksIGpz
UmVnVDEwKTsKKyAgICBzdG9yZVZhbHVlKGpzUmVnVDEwLCBhZGRyZXNzRm9yKGRzdCkpOwogfQog
Ci0KIHZvaWQgSklUOjplbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RW5kPigpOwotICAgIFJFTEVBU0VfQVNTRVJUKHJldHVyblZhbHVlR1BSICE9IGNhbGxGcmFtZVJl
Z2lzdGVyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHJl
dHVyblZhbHVlR1BSKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChyZXR1cm5WYWx1ZUpT
UiwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdmFsdWUsIHJldHVyblZhbHVlSlNSKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVz
KCk7CiAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICByZXQoKTsKQEAgLTg3LDYgKzgy
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CiB9CiAKKwogdm9pZCBKSVQ6
OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2Jq
ZWN0PigpOwpAQCAtMTA1LDcgKzEwMSw4IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBsb2FkOChBZGRyZXNz
KHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjppbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRj
aFJlZyk7CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRj
aFJlZyk7CiAgICAgbXV0YXRvckZlbmNlKCptX3ZtKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0KTsKKyAgICBib3hDZWxsKHJlc3VsdFJlZywganNSZWdUMTApOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIGpzUmVnVDEwKTsKIAog
ICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CiB9CkBAIC0xMTksOSArMTE2LDEyIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwogICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbk5ld09i
amVjdCwgJnZtKCksIHN0cnVjdHVyZVJlZyk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVy
blZhbHVlR1BSKTsKKyAgICBib3hDZWxsKHJldHVyblZhbHVlR1BSLCByZXR1cm5WYWx1ZUpTUik7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlSlNSKTsKIH0KIAor
I2lmIFVTRShKU1ZBTFVFNjQpCisKIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5z
dGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hhc0luc3RhbmNl
PigpOwpAQCAtMjEwLDEyICsyMTAsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2Vv
Zihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQotewotICAg
IC8vIFRoaXMgYWx3YXlzIGdvZXMgdG8gc2xvdyBwYXRoIHNpbmNlIHdlIGV4cGVjdCBpdCB0byBi
ZSByYXJlLgotICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci19Ci0gICAgCiB2b2lkIEpJVDo6ZW1p
dF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0eT4oKTsK
QEAgLTIyOSwzMyArMjIzLDM5IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOwogfQogCisjZW5kaWYKKwogdm9pZCBKSVQ6OmVtaXRfb3BfdHlwZW9mX2lzX3VuZGVm
aW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mSXNVbmRlZmluZWQ+KCk7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNl
bGwocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGpzUmVnVDEwKTsK
KyAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChqc1JlZ1QxMCk7CiAKLSAgICBjb21wYXJl
NjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCBy
ZWdUMCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBjb21wYXJlNjQoRXF1YWwsIGpzUmVnVDEw
LnBheWxvYWRHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVn
VDApOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBjb21wYXJlMzIoRXF1YWwsIGpzUmVn
VDEwLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDAp
OworI2VuZGlmCiAgICAgSnVtcCBkb25lID0ganVtcCgpOwogICAgIAogICAgIGlzQ2VsbC5saW5r
KHRoaXMpOwotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgo
Tm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgIEp1bXAgaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhqc1JlZ1QxMC5w
YXlsb2FkR1BSKCksIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVn
VDApOwogICAgIEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKIAogICAg
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRMb2FkU3RydWN0dXJlKHZt
KCksIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgcmVnVDEsIHJlZ1QyKTsKICAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xv
YmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CiAgICAgY29tcGFyZVB0cihFcXVhbCwgcmVnVDAs
IHJlZ1QxLCByZWdUMCk7CiAKICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7CiAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGJv
eEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwganNSZWdUMTApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVs
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjY0LDE1ICsyNjQs
MTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVy
YW5kOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGpzUmVnVDEwKTsKIAotICAgIGFuZDY0KFRydXN0
ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChF
cXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7Cisg
ICAgZW1pdFR1cm5VbmRlZmluZWRJbnRvTnVsbChqc1JlZ1QxMCk7CisgICAgaXNOdWxsKGpzUmVn
VDEwLCByZWdUMCk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBib3hCb29sZWFuKHJl
Z1QwLCBqc1JlZ1QxMCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGpzUmVnVDEw
KTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCisKIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xl
YW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQm9vbGVhbj4oKTsKQEAgLTQwMywx
NSArNDA1LDI1IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CiB9CiAKKyNlbmRpZgorCiB2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25f
bmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbiwgYXJndW1lbnRH
UFIxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgYXJndW1l
bnRHUFIyKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRH
UFIxLCBhcmd1bWVudEdQUjIpOworCisgICAgdXNpbmcgU2xvd09wZXJhdGlvbiA9IGRlY2x0eXBl
KG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxP
YmplY3RHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAwPigpOworICAg
IGNvbnN0ZXhwciBHUFJSZWcgZnVuY3Rpb25HUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93
T3BlcmF0aW9uLCAxPigpOworICAgIGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBuYW1lSlNSID0gcHJl
ZmVycmVkQXJndW1lbnRKU1I8U2xvd09wZXJhdGlvbiwgMj4oKTsKKworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIGZ1bmN0aW9uR1BSKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgbmFtZUpTUik7CisgICAg
bG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uU2V0RnVuY3Rpb25OYW1lLCBnbG9iYWxPYmplY3RHUFIsIGZ1bmN0aW9uR1BSLCBuYW1l
SlNSKTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCisKIHZvaWQgSklUOjplbWl0X29wX25vdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwpAQCAtNDI3LDIxICs0MzksMjQg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CiB9CiAK
KyNlbmRpZgorCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEpmYWxzZT4oKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBjb25zdGV4
cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHZhbHVl
ID0ganNSZWdUMTA7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29u
ZGl0aW9uLCB2YWx1ZSk7CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQotICAgIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2gyID0gcmVnVDI7Ci0gICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSByZWdU
MzsKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDI7CisgICAgY29uc3RleHBy
IEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOworICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFsT2Jq
ZWN0R1BSID0gcmVnVDQ7CisgICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAodmFsdWUsIHNjcmF0
Y2gxLCBzY3JhdGNoMiwgZ2xvYmFsT2JqZWN0R1BSKSk7CiAgICAgY29uc3RleHByIGJvb2wgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKICAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGdsb2JhbE9iamVjdEdQUik7Ci0gICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSh2bSgpLCBK
U1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJn
ZXQpOworICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBz
Y3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLCBnbG9iYWxPYmplY3RHUFIpLCB0YXJnZXQpOwogI2Vsc2UKICAgICBlbWl0TmFrZWROZWFy
Q2FsbCh2bSgpLmdldENUSVN0dWIodmFsdWVJc0ZhbHNleUdlbmVyYXRvcikucmV0YWdnZWRDb2Rl
PE5vUHRyVGFnPigpKTsKICAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCks
IHRhcmdldCk7CkBAIC00NTgsNiArNDczLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSVQ6OnZhbHVlSXNGYWxzZXlHZW5lcmF0b3IoVk0mIHZtKQogICAgIENDYWxs
SGVscGVycyBqaXQ7CiAKICAgICBjb25zdGV4cHIgR1BSUmVnIHZhbHVlID0gcmVnVDA7CisgICAg
c3RhdGljX2Fzc2VydCh2YWx1ZSA9PSBqc1JlZ1QxMC5wYXlsb2FkR1BSKCkpOwogICAgIGNvbnN0
ZXhwciBHUFJSZWcgc2NyYXRjaDEgPSByZWdUMTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2gyID0gcmVnVDI7CiAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gdHJ1ZTsKQEAgLTQ4OCw0OCArNTA0LDUxIEBAIHZvaWQgSklUOjplbWl0X29w
X2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmly
dHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWU7CiAgICAgdW5zaWduZWQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICBKdW1wIGlz
SW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywganNSZWdUMTApOworICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5v
dENlbGwoanNSZWdUMTApOwogCiAgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBj
aGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAgIEp1
bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1Qw
LCByZWdUMiwgcmVnVDEpOworICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0g
YnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQpKTsKKyAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSgpLCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCks
IHJlZ1QyLCByZWdUMSk7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMCk7CiAgICAgYWRkSnVt
cChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0
T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CiAgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9i
amVjdElzRm9yZWlnbiA9IGp1bXAoKTsKIAogICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0
ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwot
ICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwot
ICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAorICAgIGVtaXRUdXJuVW5k
ZWZpbmVkSW50b051bGwoanNSZWdUMTApOworICAgIGFkZEp1bXAoYnJhbmNoSWZOdWxsKGpzUmVn
VDEwKSwgdGFyZ2V0KTsKIAogICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOwogICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7Ci19
OworfQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEpuZXFOdWxsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29k
ZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIGpzUmVnVDEwKTsKKyAg
ICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGpzUmVnVDEwKTsKIAogICAgIC8v
IEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KLSAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKLSAgICBlbWl0TG9hZFN0cnVjdHVy
ZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFpl
cm8sIEFkZHJlc3MoanNSZWdUMTAucGF5bG9hZEdQUigpLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7
CisgICAgZW1pdExvYWRTdHJ1Y3R1cmUodm0oKSwganNSZWdUMTAucGF5bG9hZEdQUigpLCByZWdU
MiwgcmVnVDEpOwogICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGFkZEp1bXAoYnJh
bmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwogICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVt
cCgpOwogCiAgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVk
ICYgbnVsbAogICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgYW5kNjQoVHJ1c3RlZElt
bTMyKH5KU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2g2
NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkp
KSksIHRhcmdldCk7ICAgICAgICAgICAgCisgICAgZW1pdFR1cm5VbmRlZmluZWRJbnRvTnVsbChq
c1JlZ1QxMCk7CisgICAgYWRkSnVtcChicmFuY2hJZk5vdE51bGwoanNSZWdUMTApLCB0YXJnZXQp
OwogCiAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CiB9CiAKKyNpZiBVU0UoSlNWQUxV
RTY0KQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEp1bmRlZmluZWRPck51bGw+KCk7CkBAIC01NjEsNyArNTgwLDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgbG9hZENvZGVCbG9ja0NvbnN0YW50KGJ5dGVjb2RlLm1f
c3BlY2lhbFBvaW50ZXIsIHJlZ1QxKTsKKyAgICBsb2FkQ29kZUJsb2NrQ29uc3RhbnQoYnl0ZWNv
ZGUubV9zcGVjaWFsUG9pbnRlciwgSlNWYWx1ZVJlZ3MgeyByZWdUMSB9KTsKICAgICBhZGRKdW1w
KGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKIH0KIApAQCAtNTcyLDcg
KzU5MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAgIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgbG9hZENvZGVCbG9ja0NvbnN0YW50
KGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIsIHJlZ1QxKTsKKyAgICBsb2FkQ29kZUJsb2NrQ29u
c3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlciwgSlNWYWx1ZVJlZ3MgeyByZWdUMSB9KTsK
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBy
ZWdUMSk7CiAgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoMSksIGJ5dGVjb2RlLCBP
cEpuZXFQdHI6Ok1ldGFkYXRhOjpvZmZzZXRPZkhhc0p1bXBlZCgpKTsKICAgICBhZGRKdW1wKGp1
bXAoKSwgdGFyZ2V0KTsKQEAgLTU4Miw3ICs2MDEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVx
X3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVt
aXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMs
IHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbGhzLCByZWdU
MCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3JocywgcmVnVDEpOwog
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBj
b21wYXJlMzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CkBAIC01OTMsMjYgKzYxMywzMCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUu
bV9saHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9saHMsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1Qw
LCByZWdUMSksIHRhcmdldCk7CiB9CiAKKyNlbmRpZgorCiB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
TGFiZWwpOwogCi0gICAgY29uc3RleHByIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgIGNvbnN0
ZXhwciBKU1ZhbHVlUmVncyB2YWx1ZSA9IGpzUmVnVDEwOwogCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOwogI2lmICFFTkFCTEUoRVhUUkFf
Q1RJX1RIVU5LUykKLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7Ci0gICAg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcg
Z2xvYmFsT2JqZWN0R1BSID0gcmVnVDM7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoMSA9
IHJlZ1QyOworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMzsKKyAgICBjb25z
dGV4cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OworICAgIHN0YXRpY19hc3NlcnQo
bm9PdmVybGFwKHZhbHVlLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGdsb2JhbE9iamVjdEdQUikpOwog
ICAgIGNvbnN0ZXhwciBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRy
dWU7CiAgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOwotICAgIGFkZEp1bXAo
YnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRj
aDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwg
Z2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKKyAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KHZt
KCksIHZhbHVlLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgZ2xvYmFsT2JqZWN0R1BSKSwgdGFyZ2V0KTsKICNl
bHNlCiAgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHZhbHVlSXNUcnV0aHlH
ZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgYWRkSnVtcChicmFuY2hU
ZXN0MzIoTm9uWmVybywgcmVnVDApLCB0YXJnZXQpOwpAQCAtNjI5LDYgKzY1Myw3IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjp2YWx1ZUlzVHJ1dGh5R2VuZXJh
dG9yKFZNJiB2bSkKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAgICAgY29uc3RleHByIEdQUlJl
ZyB2YWx1ZSA9IHJlZ1QwOworICAgIHN0YXRpY19hc3NlcnQodmFsdWUgPT0ganNSZWdUMTAucGF5
bG9hZEdQUigpKTsKICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAgICAg
Y29uc3RleHByIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwogICAgIGNvbnN0ZXhwciBib29sIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CkBAIC02NTMsMTAgKzY3OCwx
MyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6dmFsdWVJc1Ry
dXRoeUdlbmVyYXRvcihWTSYgdm0pCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhieXRlY29kZS5tX2xocywgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLCByZWdUMSk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2xocywgcmVnVDApOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgY29tcGFyZTMyKE5vdEVx
dWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOwpAQCAtNjY4LDIxICs2OTYsMjcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
am5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMsIHJl
Z1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9saHMsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fcmhzLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCBy
ZWdUMSwgcmVnVDIpOwogICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdU
MSksIHRhcmdldCk7CiB9CiAKKyNlbmRpZgorCiB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7Ci0gICAgQVNTRVJUKHJlZ1QwID09
IHJldHVyblZhbHVlR1BSKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHJlZ1QwID09IHJldHVyblZhbHVl
R1BSKTsKIAogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICBjb3B5Q2FsbGVlU2F2
ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLnRvcEVudHJ5RnJhbWUpOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDApOwotICAgIGxv
YWRHbG9iYWxPYmplY3QocmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvblRocm93LCByZWdUMSwgcmVnVDApOworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24g
PSBkZWNsdHlwZShvcGVyYXRpb25UaHJvdyk7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxP
YmplY3RHUFIgPSBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAwPigpOworICAg
IGNvbnN0ZXhwciBKU1ZhbHVlUmVncyB2YWx1ZUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNs
b3dPcGVyYXRpb24sIDE+KCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3ZhbHVlLCB2YWx1ZUpTUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIp
OworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBnbG9i
YWxPYmplY3RHUFIsIHZhbHVlSlNSKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKCkp
OwogI2Vsc2UKICAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gYXJndW1l
bnRHUFIyOwpAQCAtNzI1LDYgKzc1OSw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSklUOjpvcF90aHJvd19oYW5kbGVyR2VuZXJhdG9yKFZNJiB2bSkKIH0KICNlbmRp
ZiAvLyBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAorI2lmIFVTRShKU1ZBTFVFNjQpCisKIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CkBAIC03MzMsNyArNzY5LDggQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIs
IHJlZ1QxKTsKIAogI2lmIFVTRShCSUdJTlQzMikKICAgICAvKiBBdCBhIGhpZ2ggbGV2ZWwgd2Ug
ZG8gKGFzc3VtaW5nICd0eXBlJyB0byBiZSBTdHJpY3RFcSk6CkBAIC04MTgsNyArODU1LDggQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMyLCByZWdUMSk7CiAKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgLyogQXQgYSBoaWdoIGxl
dmVsIHdlIGRvIChhc3N1bWluZyAndHlwZScgdG8gYmUgU3RyaWN0RXEpOgpAQCAtMTAzMyw2ICsx
MDcxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9k
c3QsIHJlZ1QwKTsKIH0KIAorI2VuZGlmCisKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0o
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN3aXRjaEltbT4oKTsKQEAgLTEwNDYsMTYg
KzEwODYsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29y
ZCh0YWJsZUluZGV4LCBtX2J5dGVjb2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29y
ZDo6SW1tZWRpYXRlKSk7CiAgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRU
YWJsZSk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwot
ICAgIGF1dG8gbm90SW50MzIgPSBicmFuY2hJZk5vdEludDMyKHJlZ1QwKTsKLSAgICBzdWIzMihJ
bW0zMih1bmxpbmtlZFRhYmxlLm1fbWluKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NydXRpbmVlLCBqc1JlZ1QxMCk7CisgICAgYXV0byBub3RJbnQzMiA9IGJyYW5jaElm
Tm90SW50MzIoanNSZWdUMTApOworICAgIHN1YjMyKEltbTMyKHVubGlua2VkVGFibGUubV9taW4p
LCBqc1JlZ1QxMC5wYXlsb2FkR1BSKCkpOwogCi0gICAgYWRkSnVtcChicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHJlZ1QwLCBJbW0zMihsaW5rZWRUYWJsZS5tX2N0aU9mZnNldHMuc2l6ZSgpKSksIGRl
ZmF1bHRPZmZzZXQpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihsaW5rZWRUYWJsZS5tX2N0aU9m
ZnNldHMuZGF0YSgpKSwgcmVnVDEpOwotICAgIGZhckp1bXAoQmFzZUluZGV4KHJlZ1QxLCByZWdU
MCwgU2NhbGVQdHIpLCBKU1N3aXRjaFB0clRhZyk7CisgICAgYWRkSnVtcChicmFuY2gzMihBYm92
ZU9yRXF1YWwsIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgSW1tMzIobGlua2VkVGFibGUubV9jdGlP
ZmZzZXRzLnNpemUoKSkpLCBkZWZhdWx0T2Zmc2V0KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bGlua2VkVGFibGUubV9jdGlPZmZzZXRzLmRhdGEoKSksIHJlZ1QyKTsKKyAgICBsb2FkUHRyKEJh
c2VJbmRleChyZWdUMiwganNSZWdUMTAucGF5bG9hZEdQUigpLCBTY2FsZVB0ciksIHJlZ1QyKTsK
KyAgICBmYXJKdW1wKHJlZ1QyLCBKU1N3aXRjaFB0clRhZyk7CiAKICAgICBub3RJbnQzMi5saW5r
KHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblN3aXRj
aEltbVdpdGhVbmtub3duS2V5VHlwZSwgJnZtKCksIHJlZ1QwLCB0YWJsZUluZGV4LCB1bmxpbmtl
ZFRhYmxlLm1fbWluKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRp
b25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsICZ2bSgpLCBqc1JlZ1QxMCwgdGFibGVJbmRl
eCwgdW5saW5rZWRUYWJsZS5tX21pbik7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgSlNT
d2l0Y2hQdHJUYWcpOwogfQogCkBAIC0xMDc0LDkgKzExMTUsMTMgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJbmRleCwgbV9ieXRlY29kZUlu
ZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwogICAgIGxpbmtl
ZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY3J1dGluZWUsIGFyZ3VtZW50R1BSMSk7Ci0gICAgbG9hZEdsb2JhbE9iamVj
dChhcmd1bWVudEdQUjApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldp
dGhVbmtub3duS2V5VHlwZSwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIHRhYmxlSW5kZXgs
IHVubGlua2VkVGFibGUubV9taW4pOworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlw
ZShvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlKTsKKyAgICBjb25zdGV4cHIg
R1BSUmVnIGdsb2JhbE9iamVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRp
b24sIDA+KCk7CisgICAgY29uc3RleHByIEpTVmFsdWVSZWdzIHNjcnV0aW5lZUpTUiA9IHByZWZl
cnJlZEFyZ3VtZW50SlNSPFNsb3dPcGVyYXRpb24sIDE+KCk7CisKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjcnV0aW5lZSwgc2NydXRpbmVlSlNSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGdsb2JhbE9iamVjdEdQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFy
V2l0aFVua25vd25LZXlUeXBlLCBnbG9iYWxPYmplY3RHUFIsIHNjcnV0aW5lZUpTUiwgdGFibGVJ
bmRleCwgdW5saW5rZWRUYWJsZS5tX21pbik7CiAgICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwg
SlNTd2l0Y2hQdHJUYWcpOwogfQogCkBAIC0xMDkzLDkgKzExMzgsMTMgQEAgdm9pZCBKSVQ6OmVt
aXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZCh0YWJsZUluZGV4LCBtX2J5dGVj
b2RlSW5kZXgsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6U3RyaW5nKSk7CiAgICAgbGlu
a2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5saW5rZWRUYWJsZSk7CiAKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgYXJndW1lbnRHUFIxKTsKLSAgICBsb2FkR2xvYmFsT2Jq
ZWN0KGFyZ3VtZW50R1BSMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJp
bmdXaXRoVW5rbm93bktleVR5cGUsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCB0YWJsZUlu
ZGV4KTsKKyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uU3dpdGNo
U3RyaW5nV2l0aFVua25vd25LZXlUeXBlKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9i
amVjdEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAg
Y29uc3RleHByIEpTVmFsdWVSZWdzIHNjcnV0aW5lZUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNS
PFNsb3dPcGVyYXRpb24sIDE+KCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0
aW5lZSwgc2NydXRpbmVlSlNSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdEdQ
Uik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktl
eVR5cGUsIGdsb2JhbE9iamVjdEdQUiwgc2NydXRpbmVlSlNSLCB0YWJsZUluZGV4KTsKICAgICBm
YXJKdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7CiB9CiAKQEAgLTExMDUsMTUg
KzExNTQsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKIAot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1l
ZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjMSwganNSZWdUMTApOworICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENl
bGwoanNSZWdUMTApOwogCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFu
Y2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgSnVtcCBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKGpz
UmVnVDEwLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwogICAgIG1vdmUoVHJ1c3RlZEltbTMy
KDApLCByZWdUMCk7CiAgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVt
cCgpOwogCiAgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1p
dExvYWRTdHJ1Y3R1cmUodm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgZW1pdExvYWRT
dHJ1Y3R1cmUodm0oKSwganNSZWdUMTAucGF5bG9hZEdQUigpLCByZWdUMiwgcmVnVDEpOwogICAg
IGxvYWRHbG9iYWxPYmplY3QocmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3Ry
dWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBjb21wYXJlUHRyKEVx
dWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKQEAgLTExMjEsMTQgKzExNzAsMTQgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogCiAgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKIAotICAgIGFuZDY0KFRydXN0ZWRJbW0z
Mih+SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpWYWx1ZU51bGwpLCByZWdUMCk7CisgICAgZW1p
dFR1cm5VbmRlZmluZWRJbnRvTnVsbChqc1JlZ1QxMCk7CisgICAgaXNOdWxsKGpzUmVnVDEwLCBy
ZWdUMCk7CiAKICAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKICAgICB3YXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CiAKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
KyAgICBib3hCb29sZWFuKHJlZ1QwLCBqc1JlZ1QxMCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIGpzUmVnVDEwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTExMzcsMTUgKzExODYsMTUg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEs
IGpzUmVnVDEwKTsKKyAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKGpzUmVn
VDEwKTsKIAotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgo
Tm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgIEp1bXAgaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhqc1JlZ1QxMC5w
YXlsb2FkR1BSKCksIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKICAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVn
VDApOwogICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKIAog
ICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGVtaXRMb2FkU3Ry
dWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgIGVtaXRMb2FkU3RydWN0dXJl
KHZtKCksIGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgcmVnVDIsIHJlZ1QxKTsKICAgICBsb2FkR2xv
YmFsT2JqZWN0KHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7CiAgICAgY29tcGFyZVB0cihOb3RFcXVhbCwg
cmVnVDAsIHJlZ1QyLCByZWdUMCk7CkBAIC0xMTUzLDE2ICsxMjAyLDE4IEBAIHZvaWQgSklUOjpl
bWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAK
ICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwogCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5K
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlTnVsbCksIHJlZ1QwKTsKKyAgICBlbWl0
VHVyblVuZGVmaW5lZEludG9OdWxsKGpzUmVnVDEwKTsKKyAgICBpc05vdE51bGwoanNSZWdUMTAs
IHJlZ1QwKTsKIAogICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwogICAgIHdhc05vdE1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKIAotICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgIGJveEJvb2xlYW4ocmVnVDAsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwganNSZWdUMTApOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKwogdm9pZCBK
SVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpb24qKQogewogICAgIC8vIEV2ZW4gdGhv
dWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudApAQCAt
MTI4OSwxNiArMTM0MCwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVn
VDApOwogfQogCisjZW5kaWYKKwogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9zcmNEc3QsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc3JjRHN0LCBqc1JlZ1QxMCk7CiAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwocmVnVDEpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChqc1JlZ1Qx
MCk7CiAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZpbmFsT2JqZWN0
VHlwZSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90VHlwZShqc1JlZ1QxMC5wYXlsb2Fk
R1BSKCksIEZpbmFsT2JqZWN0VHlwZSkpOwogICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29k
ZSwgT3BUb1RoaXM6Ok1ldGFkYXRhOjpvZmZzZXRPZkNhY2hlZFN0cnVjdHVyZUlEKCksIHJlZ1Qy
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKKyAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihOb3RFcXVhbCwgQWRkcmVzcyhqc1JlZ1QxMC5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0
ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMzEzLDcg
KzEzNjYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIFJlZ2lzdGVySUQgY2FjaGVkRnVuY3Rpb25SZWcg
PSByZWdUNDsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMzsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJQYXlsb2FkKGNhbGxlZSwgY2FsbGVlUmVnKTsKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdEZ1bmN0aW9uKGNhbGxlZVJlZykpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVS
ZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIHJhcmVEYXRh
UmVnKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJhcmVEYXRhUmVnLCBU
cnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKSk7CkBAIC0xMzMyLDkgKzEzODUs
MTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0
UmVnLCBzY3JhdGNoUmVnKTsKICAgICBtdXRhdG9yRmVuY2UoKm1fdm0pOwogICAgIGFkZFNsb3dD
YXNlKHNsb3dDYXNlcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dCk7CisgICAgYm94Q2VsbChyZXN1bHRSZWcsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0LCBqc1JlZ1QxMCk7CiB9CiAKKyNpZiBVU0UoSlNWQUxV
RTY0KQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcENoZWNrVGR6PigpOwpAQCAtMTM5MCw2ICsxNDQ2LDE0IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzCiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAorI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCisK
K3ZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikK
K3sKKyAgICAvLyBUaGlzIGFsd2F5cyBnb2VzIHRvIHNsb3cgcGF0aCBzaW5jZSB3ZSBleHBlY3Qg
aXQgdG8gYmUgcmFyZS4KKyAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworfQorCiB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpAQCAtMTQwMCwxNiArMTQ2NCwyMiBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVgogICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVj
b2RlLm1fY29uc3RydWN0b3I7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUg
PSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoY29uc3RydWN0b3IsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwot
ICAgIGxvYWRHbG9iYWxPYmplY3QoR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIEdQUkluZm86OmFyZ3VtZW50R1BSMCwg
R1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFy
Z3VtZW50R1BSMyk7Ci0gICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOwotfQorICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVy
YXRpb25JbnN0YW5jZU9mQ3VzdG9tKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGdsb2JhbE9iamVj
dEdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDA+KCk7CisgICAgY29u
c3RleHByIEpTVmFsdWVSZWdzIHZhbHVlSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09w
ZXJhdGlvbiwgMT4oKTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGNvbnN0cnVjdG9yR1BSID0gcHJl
ZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMj4oKTsKKyAgICBjb25zdGV4cHIgSlNW
YWx1ZVJlZ3MgaGFzSW5zdGFuY2VWYWx1ZUpTUiA9IHByZWZlcnJlZEFyZ3VtZW50SlNSPFNsb3dP
cGVyYXRpb24sIDM+KCk7CiAKLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQorICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHZhbHVlSlNSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyUGF5bG9hZChjb25zdHJ1Y3RvciwgY29uc3RydWN0b3JHUFIpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgaGFzSW5zdGFuY2VWYWx1ZUpTUik7CisgICAg
bG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOworICAgIGNhbGxPcGVyYXRpb24oCisg
ICAgICAgIG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sCisgICAgICAgIGdsb2JhbE9iamVjdEdQ
UiwgdmFsdWVKU1IsIGNvbnN0cnVjdG9yR1BSLCBoYXNJbnN0YW5jZVZhbHVlSlNSKTsKKyAgICBi
b3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCByZXR1cm5WYWx1ZUpTUik7CisgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlSlNSKTsKK30KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKQEAgLTE0
MjgsMTQgKzE0OTgsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uKQogICAgICAgICBsb2FkUHRyKHB0ciwgcmVnVDApOwogICAgICAg
ICBhdXRvIHNraXBFYXJseVJldHVybiA9IGJyYW5jaFB0cihCZWxvdywgcmVnVDAsIFRydXN0ZWRJ
bW1QdHIoT3B0aW9uczo6ZWFybHlSZXR1cm5Gcm9tSW5maW5pdGVMb29wc0xpbWl0KCkpKTsKIAot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlc3VsdFJlZ3Mu
Z3ByKCkpOwotI2Vsc2UKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgbG9hZEds
b2JhbE9iamVjdChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Ci0gICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKLSNlbmRpZgor
ICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJldHVyblZhbHVlSlNSLnBheWxvYWRHUFIoKSk7Cisg
ICAgICAgIGJveENlbGwocmV0dXJuVmFsdWVKU1IucGF5bG9hZEdQUigpLCByZXR1cm5WYWx1ZUpT
Uik7CisKICAgICAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICAgICAgZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwpA
QCAtMTU3MywxMSArMTYzOCw3IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Njb3BlLCBhcmd1bWVudEdQUjEpOwotI2Vsc2UKLSAgICBlbWl0TG9h
ZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgYXJndW1lbnRHUFIxKTsKLSNlbmRpZgorICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BS
MSk7CiAgICAgYXV0byBjb25zdGFudCA9IGFkZFRvQ29uc3RhbnRQb29sKEpJVENvbnN0YW50UG9v
bDo6VHlwZTo6RnVuY3Rpb25EZWNsLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVp
bnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpKSk7CiAgICAgbG9hZENvbnN0YW50KGNv
bnN0YW50LCBhcmd1bWVudEdQUjIpOwogCkBAIC0xNjE5LDEyICsxNjgwLDggQEAgdm9pZCBKSVQ6
OmVtaXROZXdGdW5jRXhwckNvbW1vbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigp
OwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgYXJn
dW1lbnRHUFIxKTsKLSNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUs
IGFyZ3VtZW50R1BSMSk7Ci0jZW5kaWYKIAorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXls
b2FkKGJ5dGVjb2RlLm1fc2NvcGUsIGFyZ3VtZW50R1BSMSk7CiAgICAgYXV0byBjb25zdGFudCA9
IGFkZFRvQ29uc3RhbnRQb29sKEpJVENvbnN0YW50UG9vbDo6VHlwZTo6RnVuY3Rpb25FeHByLCBi
aXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGUubV9mdW5j
dGlvbkRlY2wpKSk7CiAgICAgbG9hZENvbnN0YW50KGNvbnN0YW50LCBhcmd1bWVudEdQUjIpOwog
ICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwpAQCAtMTY3OCwyMCArMTczNSwx
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXplPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0
ZWNvZGUubV9sZW5ndGg7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtYXRlcmlhbGl6ZVBvaW50
ZXJJbnRvTWV0YWRhdGEoYnl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9m
ZnNldE9mQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSgpLCBhcmd1bWVudEdQUjEpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCBhcmd1bWVudEdQUjIpOwotICAgIGxvYWRHbG9i
YWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Fy
cmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsIGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxLCBh
cmd1bWVudEdQUjIpOwotI2Vsc2UKLSAgICBtYXRlcmlhbGl6ZVBvaW50ZXJJbnRvTWV0YWRhdGEo
Ynl0ZWNvZGUsIE9wTmV3QXJyYXlXaXRoU2l6ZTo6TWV0YWRhdGE6Om9mZnNldE9mQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZSgpLCByZWdUMik7Ci0gICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwg
cmVnVDApOwotICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwgcmVnVDMsIHJlZ1QyLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKLSNlbmRpZgotfQogCi0jaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICB1c2luZyBPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25OZXdBcnJheVdpdGhT
aXplQW5kUHJvZmlsZSk7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBw
cmVmZXJyZWRBcmd1bWVudEdQUjxPcGVyYXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEdQUlJl
ZyBwcm9maWxlR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8T3BlcmF0aW9uLCAxPigpOworICAg
IGNvbnN0ZXhwciBKU1ZhbHVlUmVncyBzaXplSlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8T3Bl
cmF0aW9uLCAyPigpOworCisgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVj
b2RlLCBPcE5ld0FycmF5V2l0aFNpemU6Ok1ldGFkYXRhOjpvZmZzZXRPZkFycmF5QWxsb2NhdGlv
blByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXpl
SW5kZXgsIHNpemVKU1IpOworICAgIGxvYWRHbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0R1BSKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBk
c3QsIGdsb2JhbE9iamVjdEdQUiwgcHJvZmlsZUdQUiwgc2l6ZUpTUik7Cit9CiAKIHZvaWQgSklU
OjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewpAQCAtMTcwMiw1NiArMTc1Niw1NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxl
X3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBUeXBlTG9j
YXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwogICAg
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVh
bFJlZ2lzdGVyOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwg
cmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIGpzUmVn
VDEwKTsKIAogICAgIEp1bXBMaXN0IGp1bXBUb0VuZDsKIAotICAgIGp1bXBUb0VuZC5hcHBlbmQo
YnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZFbXB0
eShqc1JlZ1QxMCkpOwogCiAgICAgLy8gQ29tcGlsZSBpbiBhIHByZWRpY3RpdmUgdHlwZSBjaGVj
aywgaWYgcG9zc2libGUsIHRvIHNlZSBpZiB3ZSBjYW4gc2tpcCB3cml0aW5nIHRvIHRoZSBsb2cu
CiAgICAgLy8gVGhlc2UgdHlwZWNoZWNrcyBhcmUgaW5saW5lZCB0byBtYXRjaCB0aG9zZSBvZiB0
aGUgNjQtYml0IEpTVmFsdWUgdHlwZSBjaGVja3MuCiAgICAgaWYgKGNhY2hlZFR5cGVMb2NhdGlv
bi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZVVuZGVmaW5lZCkKLSAgICAgICAganVtcFRvRW5kLmFw
cGVuZChicmFuY2hJZlVuZGVmaW5lZChyZWdUMCkpOworICAgICAgICBqdW1wVG9FbmQuYXBwZW5k
KGJyYW5jaElmVW5kZWZpbmVkKGpzUmVnVDEwKSk7CiAgICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxv
Y2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlTnVsbCkKLSAgICAgICAganVtcFRvRW5kLmFw
cGVuZChicmFuY2hJZk51bGwocmVnVDApKTsKKyAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFu
Y2hJZk51bGwoanNSZWdUMTApKTsKICAgICBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1f
bGFzdFNlZW5UeXBlID09IFR5cGVCb29sZWFuKQotICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJy
YW5jaElmQm9vbGVhbihyZWdUMCwgcmVnVDEpKTsKKyAgICAgICAganVtcFRvRW5kLmFwcGVuZChi
cmFuY2hJZkJvb2xlYW4oanNSZWdUMTAsIHJlZ1QyKSk7CiAgICAgZWxzZSBpZiAoY2FjaGVkVHlw
ZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlQW55SW50KQotICAgICAgICBqdW1wVG9F
bmQuYXBwZW5kKGJyYW5jaElmSW50MzIocmVnVDApKTsKKyAgICAgICAganVtcFRvRW5kLmFwcGVu
ZChicmFuY2hJZkludDMyKGpzUmVnVDEwKSk7CiAgICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0
aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlTnVtYmVyKQotICAgICAgICBqdW1wVG9FbmQuYXBw
ZW5kKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7CisgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJh
bmNoSWZOdW1iZXIoanNSZWdUMTAsIHJlZ1QyKSk7CiAgICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxv
Y2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlU3RyaW5nKSB7Ci0gICAgICAgIEp1bXAgaXNO
b3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAganVtcFRvRW5kLmFwcGVu
ZChicmFuY2hJZlN0cmluZyhyZWdUMCkpOworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5j
aElmTm90Q2VsbChqc1JlZ1QxMCk7CisgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZT
dHJpbmcoanNSZWdUMTAucGF5bG9hZEdQUigpKSk7CiAgICAgICAgIGlzTm90Q2VsbC5saW5rKHRo
aXMpOwogICAgIH0KIAogICAgIC8vIExvYWQgdGhlIHR5cGUgcHJvZmlsaW5nIGxvZyBpbnRvIFQy
LgogICAgIFR5cGVQcm9maWxlckxvZyogY2FjaGVkVHlwZVByb2ZpbGVyTG9nID0gbV92bS0+dHlw
ZVByb2ZpbGVyTG9nKCk7CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVQcm9maWxl
ckxvZyksIHJlZ1QyKTsKLSAgICAvLyBMb2FkIHRoZSBuZXh0IGxvZyBlbnRyeSBpbnRvIFQxLgot
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgVHlwZVByb2ZpbGVyTG9nOjpjdXJyZW50TG9nRW50
cnlPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAvLyBMb2FkIHRoZSBuZXh0IGxvZyBlbnRyeSBpbnRv
IFQzLgorICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgVHlwZVByb2ZpbGVyTG9nOjpjdXJyZW50
TG9nRW50cnlPZmZzZXQoKSksIHJlZ1QzKTsKIAogICAgIC8vIFN0b3JlIHRoZSBKU1ZhbHVlIG9u
dG8gdGhlIGxvZyBlbnRyeS4KLSAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBUeXBl
UHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojp2YWx1ZU9mZnNldCgpKSk7CisgICAgc3RvcmVWYWx1ZShq
c1JlZ1QxMCwgQWRkcmVzcyhyZWdUMywgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6dmFsdWVP
ZmZzZXQoKSkpOwogCi0gICAgLy8gU3RvcmUgdGhlIHN0cnVjdHVyZUlEIG9mIHRoZSBjZWxsIGlm
IFQwIGlzIGEgY2VsbCwgb3RoZXJ3aXNlLCBzdG9yZSAwIG9uIHRoZSBsb2cgZW50cnkuCi0gICAg
SnVtcCBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwotICAgIHN0b3Jl
MzIocmVnVDAsIEFkZHJlc3MocmVnVDEsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpKTsKKyAgICAvLyBTdG9yZSB0aGUgc3RydWN0dXJlSUQgb2YgdGhlIGNl
bGwgaWYganNSZWdUMTAgaXMgYSBjZWxsLCBvdGhlcndpc2UsIHN0b3JlIDAgb24gdGhlIGxvZyBl
bnRyeS4KKyAgICBKdW1wIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwoanNSZWdUMTApOworICAg
IGxvYWQzMihBZGRyZXNzKGpzUmVnVDEwLnBheWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgcmVnVDApOworICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDMsIFR5
cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKICAgICBKdW1w
IHNraXBJc0NlbGwgPSBqdW1wKCk7CiAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgIHN0b3Jl
MzIoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKHJlZ1QxLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0Vu
dHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCks
IEFkZHJlc3MocmVnVDMsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpKTsKICAgICBza2lwSXNDZWxsLmxpbmsodGhpcyk7CiAKICAgICAvLyBTdG9yZSB0aGUg
dHlwZUxvY2F0aW9uIG9uIHRoZSBsb2cgZW50cnkuCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNh
Y2hlZFR5cGVMb2NhdGlvbiksIHJlZ1QwKTsKLSAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHJl
Z1QxLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojpsb2NhdGlvbk9mZnNldCgpKSk7CisgICAg
c3RvcmVQdHIocmVnVDAsIEFkZHJlc3MocmVnVDMsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6
OmxvY2F0aW9uT2Zmc2V0KCkpKTsKIAogICAgIC8vIEluY3JlbWVudCB0aGUgY3VycmVudCBsb2cg
ZW50cnkuCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoVHlwZVByb2ZpbGVyTG9nOjpM
b2dFbnRyeSkpLCByZWdUMSk7Ci0gICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMiwgVHlw
ZVByb2ZpbGVyTG9nOjpjdXJyZW50TG9nRW50cnlPZmZzZXQoKSkpOwotICAgIEp1bXAgc2tpcENs
ZWFyTG9nID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbVB0cihjYWNoZWRU
eXBlUHJvZmlsZXJMb2ctPmxvZ0VuZFB0cigpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihz
aXplb2YoVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeSkpLCByZWdUMyk7CisgICAgc3RvcmVQdHIo
cmVnVDMsIEFkZHJlc3MocmVnVDIsIFR5cGVQcm9maWxlckxvZzo6Y3VycmVudExvZ0VudHJ5T2Zm
c2V0KCkpKTsKKyAgICBKdW1wIHNraXBDbGVhckxvZyA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVn
VDMsIFRydXN0ZWRJbW1QdHIoY2FjaGVkVHlwZVByb2ZpbGVyTG9nLT5sb2dFbmRQdHIoKSkpOwog
ICAgIC8vIENsZWFyIHRoZSBsb2cgaWYgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgbG9nLgogICAg
IGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblByb2Nlc3NUeXBlUHJvZmls
ZXJMb2csICZ2bSgpKTsKICAgICBza2lwQ2xlYXJMb2cubGluayh0aGlzKTsKQEAgLTE3NjMsMTMg
KzE4MTcsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3Vl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3QKIHsKICAgICBSRUxFQVNFX0FTU0VS
VCh2bSgpLnNoYWRvd0NoaWNrZW4oKSk7CiAgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7Ci0gICAg
c3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIs
ICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOworICAgIHN0YXRpY19h
c3NlcnQobm9PdmVybGFwKHJlZ1QwLCBub25BcmdHUFIwLCByZWdUMiksICJ3ZSB3aWxsIGhhdmUg
cHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlPigpOwogICAgIEdQUlJl
ZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25B
cmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgR1BS
UmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CiAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2
bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwogICAgIGxv
Z1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVn
LCByZWdUMyk7CiB9CiAKQEAgLTE3NzcsNyArMTgzMSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2xv
Z19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2VuKCkpOwogICAgIHVw
ZGF0ZVRvcENhbGxGcmFtZSgpOwotICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdU
MCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMg
aXMgdHJ1ZS4iKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChyZWdUMCwgbm9uQXJnR1BS
MCwgcmVnVDIpLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChyZWdUMCwgcmVnVDEsIGpzUmVnVDMyLCByZWdUNCks
ICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93Q2hpY2tlblRhaWw+KCk7
CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1QwOwogICAgIHsKQEAgLTE3ODUsMTQg
KzE4NDAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAgICAgR1BSUmVnIHNjcmF0
Y2gyUmVnID0gcmVnVDI7CiAgICAgICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwg
c2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwogICAgIH0KLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMik7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RoaXNWYWx1ZSwganNSZWdUMzIpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUsIHJlZ1Q0KTsK
ICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDEp
OwotICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1
ZVJlZ3MocmVnVDIpLCByZWdUMywgcmVnVDEsIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4
KSk7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBqc1Jl
Z1QzMiwgcmVnVDQsIHJlZ1QxLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQog
Ci0jZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9j
b250cm9sX2Zsb3coY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBtX2lzU2hhcmVhYmxlID0gZmFsc2U7CkBAIC0xODUzLDI4ICsxOTA2LDI0IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QXJn
dW1lbnQ+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyhyZWdUMSwgcmVnVDApOwotI2VuZGlmCiAKICAgICBsb2FkMzIocGF5bG9hZEZvcihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QyKTsKICAgICBK
dW1wIGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1Qy
LCBUcnVzdGVkSW1tMzIoaW5kZXgpKTsKLSAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihWaXJ0dWFs
UmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpKSwgcmVzdWx0UmVn
cyk7CisgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNs
b3Q6OnRoaXNBcmd1bWVudCArIGluZGV4KSksIGpzUmVnVDEwKTsKICAgICBKdW1wIGRvbmUgPSBq
dW1wKCk7CiAKICAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgbW92ZVZh
bHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOworICAgIG1vdmVWYWx1ZShqc1VuZGVmaW5l
ZCgpLCBqc1JlZ1QxMCk7CiAKICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJlc3VsdFJlZ3MpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTAp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29mKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKTsKKwogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzKHJlZ1QyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2RlczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAppbmRleCBkNDg0MzRjZWZmYTllNTI3MTc3MjljMzU0NDA3OTU3OGFjZmUxNzgzLi4x
MjJjOWFhYWY2MTg2OTI0NWQ4NzI1ZGU2NGNkMmU5Nzc1YzAyNWQ3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCkBAIC01MCw3MyArNTAsNiBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBKSVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKLSAg
ICAKLSAgICBpZiAoc3JjLmlzQ29uc3RhbnQoKSkKLSAgICAgICAgZW1pdFN0b3JlKGRzdCwgZ2V0
Q29uc3RhbnRPcGVyYW5kKHNyYykpOwotICAgIGVsc2UgewotICAgICAgICBlbWl0TG9hZChzcmMs
IHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci0g
ICAgfQotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKLXsKLSAgICBBU1NFUlQocmV0dXJuVmFsdWVHUFIgIT0gY2FsbEZyYW1l
UmVnaXN0ZXIpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RW5kPigpOwotICAgIGVtaXRMb2FkKGJ5dGVjb2RlLm1fdmFsdWUsIHJlZ1QxLCByZXR1cm5WYWx1
ZUdQUik7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgIGVtaXRGdW5jdGlvbkVw
aWxvZ3VlKCk7Ci0gICAgcmV0KCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2ptcChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm1wPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAg
ICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29i
amVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwotICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7Ci0g
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9m
aWxlLnN0cnVjdHVyZSgpOwotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmpl
Y3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgQWxs
b2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWxDb25jdXJyZW50bHk8SlNG
aW5hbE9iamVjdD4oKm1fdm0sIGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxv
Y2F0b3JJZkV4aXN0cyk7Ci0KLSAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJldHVyblZhbHVl
R1BSOwotICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJ
RCBzY3JhdGNoUmVnID0gcmVnVDM7Ci0KLSAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRk
U2xvd0Nhc2UoanVtcCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
OwotICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAg
ICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFu
dChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0
dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwotICAgICAgICBlbWl0SW5pdGlhbGl6ZUlu
bGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAg
ICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0U3RvcmVDZWxsKGJ5dGVj
b2RlLm1fZHN0LCByZXN1bHRSZWcpOwotICAgIH0KLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
ZXdPYmplY3Q+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3By
b2ZpbGVkQ29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRp
b25Qcm9maWxlLnN0cnVjdHVyZSgpOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvbk5ld09iamVjdCwgJnZtKCksIHN0cnVjdHVyZSk7Ci0gICAgZW1pdFN0b3JlQ2Vs
bChkc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVz
X2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFz
SW5zdGFuY2U+KCk7CkBAIC0xMjQsMTMgKzU3LDE0IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJy
aWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9y
OwogICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJ
bnN0YW5jZVZhbHVlOwogCi0gICAgZW1pdExvYWRQYXlsb2FkKGhhc0luc3RhbmNlVmFsdWUsIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChoYXNJbnN0YW5jZVZhbHVl
LCByZWdUMCk7CiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhh
c0luc3RhbmNlIHdvdWxkIGRvLgogICAgIEp1bXAgaGFzSW5zdGFuY2VWYWx1ZU5vdENlbGwgPSBl
bWl0SnVtcElmTm90SlNDZWxsKGhhc0luc3RhbmNlVmFsdWUpOwotICAgIEp1bXAgY3VzdG9taGFz
SW5zdGFuY2VWYWx1ZSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIo
bV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0
YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAg
ICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1Qw
LCBBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fZnVuY3Rp
b25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24pKSk7CiAKICAgICAvLyBXZSBrbm93IHRo
YXQgY29uc3RydWN0b3IgaXMgYW4gb2JqZWN0IGZyb20gdGhlIHdheSBieXRlY29kZSBpcyBlbWl0
dGVkIGZvciBpbnN0YW5jZW9mIGV4cHJlc3Npb25zLgotICAgIGVtaXRMb2FkUGF5bG9hZChjb25z
dHJ1Y3RvciwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGNvbnN0
cnVjdG9yLCByZWdUMCk7CiAKICAgICAvLyBDaGVjayB0aGF0IGNvbnN0cnVjdG9yICdJbXBsZW1l
bnRzRGVmYXVsdEhhc0luc3RhbmNlJyBpLmUuIHRoZSBvYmplY3QgaXMgbm90IGEgQy1BUEkgdXNl
ciBub3IgYSBib3VuZCBmdW5jdGlvbi4KICAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVm
YXVsdEhhc0luc3RhbmNlKSwgcmVnVDApOwpAQCAtMTU5LDggKzkzLDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIHVzaW5nIEJhc2VsaW5lSW5zdGFuY2VvZlJlZ2lzdGVyczo6c2NyYXRjaDFHUFI7CiAgICAg
dXNpbmcgQmFzZWxpbmVJbnN0YW5jZW9mUmVnaXN0ZXJzOjpzY3JhdGNoMkdQUjsKIAotICAgIGVt
aXRMb2FkUGF5bG9hZCh2YWx1ZSwgdmFsdWVKU1IucGF5bG9hZEdQUigpKTsKLSAgICBlbWl0TG9h
ZFBheWxvYWQocHJvdG8sIHByb3RvSlNSLnBheWxvYWRHUFIoKSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlclBheWxvYWQodmFsdWUsIHZhbHVlSlNSLnBheWxvYWRHUFIoKSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQocHJvdG8sIHByb3RvSlNSLnBheWxvYWRHUFIoKSk7
CiAKICAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEg
Y2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5z
dGFuY2UuCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZhbHVlKTsKQEAgLTE4OCwx
MiArMTIyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZXN1bHRHUFIp
OwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVj
dGlvbiopCi17Ci0gICAgLy8gVGhpcyBhbHdheXMgZ29lcyB0byBzbG93IHBhdGggc2luY2Ugd2Ug
ZXhwZWN0IGl0IHRvIGJlIHJhcmUuCi0gICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLX0KLQogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwpAQCAtMjE0LDE1ICsxNDIsMTIgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFMKICAgICB1c2luZyBCYXNlbGluZUluc3RhbmNlb2ZSZWdpc3RlcnM6OnBy
b3RvSlNSOwogICAgIHN0YXRpY19hc3NlcnQodmFsdWVKU1IgPT0gcHJlZmVycmVkQXJndW1lbnRK
U1I8U2xvd09wZXJhdGlvbiwgMj4oKSk7CiAgICAgLy8gUHJvdG8gd2lsbCBiZSBwYXNzZWQgb24g
c3RhY2ssIGp1c3QgbWFrZSBzdXJlIG5vIG92ZXJsYXAKLSAgICBzdGF0aWNfYXNzZXJ0KCFwcm90
b0pTUi51c2VzKGdsb2JhbE9iamVjdEdQUikpOwotICAgIHN0YXRpY19hc3NlcnQoIXByb3RvSlNS
LnVzZXMoc3R1YkluZm9HUFIpKTsKLSAgICBzdGF0aWNfYXNzZXJ0KCF2YWx1ZUpTUi51c2VzKGds
b2JhbE9iamVjdEdQUikpOwotICAgIHN0YXRpY19hc3NlcnQoIXZhbHVlSlNSLnVzZXMoc3R1Yklu
Zm9HUFIpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcCh2YWx1ZUpTUiwgcHJvdG9KU1Is
IGdsb2JhbE9iamVjdEdQUiwgc3R1YkluZm9HUFIpKTsKIAogICAgIGxvYWRHbG9iYWxPYmplY3Qo
Z2xvYmFsT2JqZWN0R1BSKTsKICAgICBsb2FkQ29uc3RhbnQoZ2VuLm1fdW5saW5rZWRTdHViSW5m
b0NvbnN0YW50SW5kZXgsIHN0dWJJbmZvR1BSKTsKLSAgICBlbWl0TG9hZFRhZyh2YWx1ZSwgdmFs
dWVKU1IudGFnR1BSKCkpOwotICAgIGVtaXRMb2FkVGFnKHByb3RvLCBwcm90b0pTUi50YWdHUFIo
KSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclRhZyh2YWx1ZSwgdmFsdWVKU1IudGFnR1BS
KCkpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcocHJvdG8sIHByb3RvSlNSLnRhZ0dQ
UigpKTsKICAgICBjYWxsT3BlcmF0aW9uPFNsb3dPcGVyYXRpb24+KAogICAgICAgICBBZGRyZXNz
KHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkp
LAogICAgICAgICBkc3QsCkBAIC0yMzAsODMgKzE1NSwyNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8UwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uc3Ry
dWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yOwotICAgIFZpcnR1YWxSZWdpc3RlciBoYXNJ
bnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlOwotCi0gICAgZW1pdExv
YWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGNvbnN0cnVjdG9y
LCByZWdUMik7Ci0gICAgZW1pdExvYWQoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDQsIHJlZ1QzKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20sIG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCByZWdU
MiwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSk7Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJl
dHVyblZhbHVlR1BSKTsKLX0KLSAgICAKIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5PigpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRl
Y29kZS5tX29wZXJhbmQ7CiAgICAgCi0gICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBj
b21wYXJlMzIoRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRh
ZyksIHJlZ1QwKTsKIAogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7CiB9CiAKLXZvaWQg
SklUOjplbWl0X29wX3R5cGVvZl9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFR5cGVvZklzVW5kZWZpbmVkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29w
ZXJhbmQ7Ci0gICAgCi0gICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgSnVt
cCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDEpOwotCi0gICAgY29tcGFyZTMyKEVxdWFsLCBy
ZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgSnVt
cCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsK
LSAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0gICAgCi0gICAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAp
OwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZz
ZXQoKSksIHJlZ1QxKTsKLSAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDAp
OwotCi0gICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGRvbmUu
bGluayh0aGlzKTsKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwotfQotCi12b2lkIEpJ
VDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSXNVbmRlZmluZWRPck51bGw+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZDsKLQotICAgIGVtaXRMb2FkVGFnKHZhbHVlLCByZWdUMCk7Ci0gICAgc3RhdGljX2Fzc2Vy
dCgoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnICsgMSA9PSBKU1ZhbHVlOjpOdWxsVGFnKSAmJiAoSlNW
YWx1ZTo6TnVsbFRhZyAmIDB4MSksICIiKTsKLSAgICBvcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVn
VDApOwotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpO
dWxsVGFnKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Ci19Ci0KIHZv
aWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cElzQm9vbGVhbj4oKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIAot
ICAgIGVtaXRMb2FkVGFnKHZhbHVlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
clRhZyh2YWx1ZSwgcmVnVDApOwogICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgcmVnVDApOwogICAgIGVtaXRTdG9yZUJvb2woZHN0
LCByZWdUMCk7CiB9CkBAIC0zMTcsNyArMTg0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVt
YmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZDsKICAgICAKLSAgICBlbWl0TG9hZFRhZyh2YWx1ZSwgcmVnVDAp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIHJlZ1QwKTsKICAgICBhZGQz
MihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKICAgICBjb21wYXJlMzIoQmVsb3csIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnICsgMSksIHJlZ1QwKTsKICAgICBlbWl0U3Rv
cmVCb29sKGRzdCwgcmVnVDApOwpAQCAtMzM2LDcgKzIwMyw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2lzX2NlbGxfd2l0aF90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIGlu
dCB0eXBlID0gYnl0ZWNvZGUubV90eXBlOwogCi0gICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCBy
ZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsK
ICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7CiAKICAgICBjb21w
YXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOwpAQCAtMzU1LDcgKzIyMiw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0TG9hZCh2YWx1
ZSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MSwgcmVnVDApOwogICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsK
IAogICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBl
SW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOwpAQCAt
Mzc0LDcgKzI0MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9zcmM7
CiAKLSAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMsIHJlZ1QxLCByZWdUMCk7CiAKICAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QxKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOwpA
QCAtMzkwLDcgKzI1Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUu
bV9zcmM7CiAKLSAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QxLCByZWdUMCk7CiAKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdENlbGwocmVnVDEpKTsKICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZlN5bWJvbChyZWdU
MCk7CkBAIC00MDEsMTE5ICsyNjgsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJvcGVydHlf
a2V5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGVtaXRT
dG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3NldF9mdW5j
dGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlvbk5hbWU+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGZ1bmMgPSBieXRlY29kZS5tX2Z1bmN0aW9uOwotICAg
IFZpcnR1YWxSZWdpc3RlciBuYW1lID0gYnl0ZWNvZGUubV9uYW1lOwotICAgIGVtaXRMb2FkUGF5
bG9hZChmdW5jLCByZWdUMSk7Ci0gICAgZW1pdExvYWQobmFtZSwgcmVnVDMsIHJlZ1QyKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgbV9wcm9maWxlZENvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QxLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsK
LX0KLQogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOb3Q+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAg
IFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0TG9h
ZFRhZyhzcmMsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyVGFnKHNyYywgcmVn
VDApOwogCi0gICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMSwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Qm9vbGVhbihyZWdUMSwgSW52YWxpZEdQUlJlZykpOwogICAgIHhvcjMyKFRydXN0ZWRJbW0z
MigxKSwgcmVnVDApOwogCiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwLCAoZHN0ID09IHNy
YykpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEpmYWxzZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgY29uZCA9IGJ5dGVjb2Rl
Lm1fY29uZGl0aW9uOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLQotICAgIGVtaXRMb2FkKGNvbmQs
IHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBKU1ZhbHVlUmVncyB2YWx1ZShyZWdUMSwgcmVnVDApOwot
ICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QyOwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1Qz
OwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAg
ICBhZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIHZhbHVlLCBzY3JhdGNoMSwgc2NyYXRjaDIs
IGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9w
cm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQot
ewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGNvbmQgPSBieXRlY29kZS5tX2NvbmRpdGlvbjsKLSAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXRMYWJlbCk7Ci0KLSAgICBlbWl0TG9hZChjb25kLCByZWdUMSwgcmVnVDApOwotICAg
IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBKU1Zh
bHVlUmVncyB2YWx1ZShyZWdUMSwgcmVnVDApOwotICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1Qy
OwotICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QzOwotICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0
aHkodm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXFOdWxsPigpOwotICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLQotICAg
IGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKLQotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDEpOwotCi0gICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0g
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNz
KHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQp
OwotICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7Ci0K
LSAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxs
Ci0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICBzdGF0aWNfYXNzZXJ0KChKU1ZhbHVl
OjpVbmRlZmluZWRUYWcgKyAxID09IEpTVmFsdWU6Ok51bGxUYWcpICYmIChKU1ZhbHVlOjpOdWxs
VGFnICYgMHgxKSwgIiIpOwotICAgIG9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAg
YWRkSnVtcChicmFuY2hJZk51bGwocmVnVDEpLCB0YXJnZXQpOwotCi0gICAgaXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJ
c0ZvcmVpZ24ubGluayh0aGlzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7Ci0KLSAg
ICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBKdW1wIGlzSW1tZWRpYXRlID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKLQotICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVybywg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpOwotICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1Qw
KTsKLSAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIHdh
c05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0
ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwot
Ci0gICAgc3RhdGljX2Fzc2VydCgoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnICsgMSA9PSBKU1ZhbHVl
OjpOdWxsVGFnKSAmJiAoSlNWYWx1ZTo6TnVsbFRhZyAmIDB4MSksICIiKTsKLSAgICBvcjMyKFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZOb3ROdWxsKHJlZ1Qx
KSwgdGFyZ2V0KTsKLQotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotfQotCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEp1bmRlZmluZWRPck51bGw+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0g
Ynl0ZWNvZGUubV92YWx1ZTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7CiAKLSAgICBlbWl0TG9hZFRh
Zyh2YWx1ZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIHJl
Z1QwKTsKICAgICBzdGF0aWNfYXNzZXJ0KChKU1ZhbHVlOjpVbmRlZmluZWRUYWcgKyAxID09IEpT
VmFsdWU6Ok51bGxUYWcpICYmIChKU1ZhbHVlOjpOdWxsVGFnICYgMHgxKSwgIiIpOwogICAgIG9y
MzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CiAgICAgYWRkSnVtcChicmFuY2hJZk51bGwocmVn
VDApLCB0YXJnZXQpOwpAQCAtNTI1LDcgKzMwMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2pudW5k
ZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKIAotICAgIGVtaXRMb2FkVGFnKHZhbHVlLCByZWdUMCk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlclRhZyh2YWx1ZSwgcmVnVDApOwogICAgIHN0YXRpY19hc3NlcnQoKEpTVmFs
dWU6OlVuZGVmaW5lZFRhZyArIDEgPT0gSlNWYWx1ZTo6TnVsbFRhZykgJiYgKEpTVmFsdWU6Ok51
bGxUYWcgJiAweDEpLCAiIik7CiAgICAgb3IzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKICAg
ICBhZGRKdW1wKGJyYW5jaElmTm90TnVsbChyZWdUMCksIHRhcmdldCk7CkBAIC01MzUsMTMgKzMx
MSwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfcHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKZXFQdHI+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1f
dmFsdWU7Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENvbnN0YW50T3BlcmFuZChi
eXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKLSAgICBBU1NFUlQoc3BlY2lhbFBvaW50ZXIuaXND
ZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEs
IHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDEsIHJlZ1QwKTsK
ICAgICBKdW1wIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwotICAgIGFkZEp1bXAo
YnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihzcGVjaWFsUG9pbnRlci5hc0Nl
bGwoKSkpLCB0YXJnZXQpOworICAgIGxvYWRDb2RlQmxvY2tDb25zdGFudFBheWxvYWQoYnl0ZWNv
ZGUubV9zcGVjaWFsUG9pbnRlciwgcmVnVDIpOworICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFs
LCByZWdUMCwgcmVnVDIpLCB0YXJnZXQpOwogICAgIG5vdENlbGwubGluayh0aGlzKTsKIH0KIApA
QCAtNTQ5LDEzICszMjQsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgSlNWYWx1ZSBzcGVjaWFsUG9pbnRlciA9IGdldENv
bnN0YW50T3BlcmFuZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyKTsKLSAgICBBU1NFUlQoc3Bl
Y2lhbFBvaW50ZXIuaXNDZWxsKCkpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAotICAgIGVtaXRM
b2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywg
cmVnVDEsIHJlZ1QwKTsKICAgICBKdW1wIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDEp
OwotICAgIEp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRy
KHNwZWNpYWxQb2ludGVyLmFzQ2VsbCgpKSk7CisgICAgbG9hZENvZGVCbG9ja0NvbnN0YW50UGF5
bG9hZChieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyLCByZWdUMik7CisgICAgSnVtcCBlcXVhbCA9
IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIHJlZ1QyKTsKICAgICBub3RDZWxsLmxpbmsodGhpcyk7
CiAgICAgc3RvcmU4VG9NZXRhZGF0YShUcnVzdGVkSW1tMzIoMSksIGJ5dGVjb2RlLCBPcEpuZXFQ
dHI6Ok1ldGFkYXRhOjpvZmZzZXRPZkhhc0p1bXBlZCgpKTsKICAgICBhZGRKdW1wKGp1bXAoKSwg
dGFyZ2V0KTsKQEAgLTU3MCw3ICszNDQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMx
ID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5t
X3JoczsKIAotICAgIGVtaXRMb2FkMihzcmMxLCByZWdUMSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCBy
ZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMSwgcmVnVDApOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7CiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZDZWxsKHJlZ1QxKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQmVsb3cs
IHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwpAQCAtNTk1LDEzICsz
NzAsMTUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUUKICAgICBnZW5lcmljQ2FzZS5hcHBlbmQo
YnJhbmNoSWZOb3RTdHJpbmcocmVnVDIpKTsKIAogICAgIC8vIFN0cmluZyBjYXNlLgotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCBtX3Byb2ZpbGVkQ29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJl
Z1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgcmVnVDEs
IHJlZ1QwLCByZWdUMik7CiAgICAgc3RvcmVSZXN1bHQuYXBwZW5kKGp1bXAoKSk7CiAKICAgICAv
LyBHZW5lcmljIGNhc2UuCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIp
KTsgLy8gZG91YmxlcwogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlRXEsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVFcSwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOwogCiAgICAgc3RvcmVSZXN1bHQubGluayh0aGlzKTsKICAgICBl
bWl0U3RvcmVCb29sKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwpAQCAtNjE0LDcgKzM5MSw4IEBAIHZv
aWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0gYnl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3JoczsKIAotICAgIGVtaXRMb2FkMihzcmMxLCBy
ZWdUMSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzcmMxLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
MiwgcmVnVDMsIHJlZ1QyKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDEsIHJlZ1QzKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QxKSk7CiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
TG93ZXN0VGFnKSkpOwpAQCAtNjM0LDE0ICs0MTIsMTYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcEVx
SnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQ29tcGlsZU9w
RXEKICAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDIpKTsKIAog
ICAgIC8vIFN0cmluZyBjYXNlLgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmluZ0VxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDAsIHJlZ1Qy
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVTdHJpbmdFcSwgcmVnVDEsIHJlZ1QwLCByZWdUMik7CiAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoYnJhbmNoVGVzdDMyKHR5cGUgPT0gQ29tcGlsZU9wRXFUeXBlOjpFcSA/IE5vblpl
cm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQUiksIGp1bXBUYXJnZXQpOwogICAgIGRvbmUuYXBwZW5k
KGp1bXAoKSk7CiAKICAgICAvLyBHZW5lcmljIGNhc2UuCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5k
KGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gZG91YmxlcwogICAgIGdlbmVyaWNDYXNlLmxpbmsodGhp
cyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIG1fcHJvZmlsZWRDb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1Q0KTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDQsIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGJyYW5jaFRlc3QzMih0eXBlID09IENvbXBpbGVPcEVxVHlwZTo6RXEgPyBOb25aZXJvIDog
WmVybywgcmV0dXJuVmFsdWVHUFIpLCBqdW1wVGFyZ2V0KTsKIAogICAgIGRvbmUubGluayh0aGlz
KTsKQEAgLTY2MSw3ICs0NDEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5
dGVjb2RlLm1fbGhzOwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7
CiAKLSAgICBlbWl0TG9hZDIoc3JjMSwgcmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVnVDIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIHJlZ1QzLCByZWdUMik7CiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMykpOwogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmQ2VsbChyZWdUMSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEJlbG93LCByZWdU
MSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKQEAgLTY4NiwxMyArNDY3LDE1
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlCiAgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5j
aElmTm90U3RyaW5nKHJlZ1QyKSk7CiAKICAgICAvLyBTdHJpbmcgY2FzZS4KLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIHJlZ1QwLCByZWdUMik7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMSk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIHJlZ1QxLCByZWdU
MCwgcmVnVDIpOwogICAgIHN0b3JlUmVzdWx0LmFwcGVuZChqdW1wKCkpOwogCiAgICAgLy8gR2Vu
ZXJpYyBjYXNlLgogICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8v
IGRvdWJsZXMKICAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZUVxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7Cisg
ICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlRXEsIHJlZ1Q0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpKTsKIAogICAgIHN0b3JlUmVzdWx0LmxpbmsodGhpcyk7CiAgICAgeG9yMzIo
VHJ1c3RlZEltbTMyKDB4MSksIHJldHVyblZhbHVlR1BSKTsKQEAgLTcwNiw3ICs0ODksOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdExvYWQyKHNyYzEs
IHJlZ1QxLCByZWdUMCwgc3JjMiwgcmVnVDMsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYzEsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMyLCByZWdUMywgcmVnVDIpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMSwgcmVnVDMpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDEpKTsKICAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpMb3dlc3RUYWcpKSk7CkBAIC03MjksNyArNTEzLDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0
cmljdEVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3Jj
MiA9IGJ5dGVjb2RlLm1fcmhzOwogCi0gICAgZW1pdExvYWQyKHNyYzEsIHJlZ1QxLCByZWdUMCwg
c3JjMiwgcmVnVDMsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJl
Z1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCByZWdUMywgcmVn
VDIpOwogCiAgICAgLy8gQmFpbCBpZiB0aGUgdGFncyBkaWZmZXIsIG9yIGFyZSBkb3VibGUuCiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMykpOwpAQCAtNzY5
LDI0ICs1NTQsMjUgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMxID0g
Ynl0ZWNvZGUubV9saHM7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYzIgPSBieXRlY29kZS5tX3Jo
czsKIAotICAgIGVtaXRMb2FkMihzcmMxLCByZWdUMSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCByZWdU
Mik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBqc1JlZ1QxMCk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBqc1JlZ1QzMik7CiAKICAgICAvLyBCYWlsIGlmIHRo
ZSB0YWdzIGRpZmZlciwgb3IgYXJlIGRvdWJsZS4KLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQmVsb3cs
IHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBqc1JlZ1QxMC50YWdHUFIoKSwganNSZWdUMzIudGFnR1BS
KCkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywganNSZWdUMTAudGFnR1BSKCks
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CiAKICAgICAvLyBKdW1wIHRvIGEg
c2xvdyBjYXNlIGlmIGJvdGggYXJlIHN0cmluZ3Mgb3Igc3ltYm9scyAobm9uIG9iamVjdCkuCi0g
ICAgSnVtcCBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKLSAgICBKdW1wIGZpcnN0
SXNPYmplY3QgPSBicmFuY2hJZk9iamVjdChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RPYmplY3QocmVnVDIpKTsKKyAgICBKdW1wIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
anNSZWdUMTApOworICAgIEp1bXAgZmlyc3RJc09iamVjdCA9IGJyYW5jaElmT2JqZWN0KGpzUmVn
VDEwLnBheWxvYWRHUFIoKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QoanNS
ZWdUMzIucGF5bG9hZEdQUigpKSk7CiAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwogICAgIGZpcnN0
SXNPYmplY3QubGluayh0aGlzKTsKIAogICAgIC8vIFNpbXBseSBjb21wYXJlIHRoZSBwYXlsb2Fk
cy4KICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZTxPcCwgT3BKc3RyaWN0ZXE+Ojp2YWx1
ZSkKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0
KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwganNSZWdUMTAucGF5bG9hZEdQUigp
LCBqc1JlZ1QzMi5wYXlsb2FkR1BSKCkpLCB0YXJnZXQpOwogICAgIGVsc2UKLSAgICAgICAgYWRk
SnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwganNSZWdUMTAucGF5bG9hZEdQUigpLCBqc1JlZ1Qz
Mi5wYXlsb2FkR1BSKCkpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qc3RyaWN0
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTgwNSw3ICs1OTEs
OCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbAogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBtX3Byb2ZpbGVkQ29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUNCk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1Q0LCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQp
OwogfQogCkBAIC04MTUsOTEgKzYwMiwxOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJp
Y3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogCiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigp
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVTdHJpY3RFcSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGxvYWRH
bG9iYWxPYmplY3QocmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmljdEVxLCByZWdUNCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJl
dHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpOwotICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0
ZWNvZGUubV9vcGVyYW5kOwotCi0gICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwotICAg
IEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwotCi0gICAgSnVtcCBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QxKTsKLSAg
ICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0g
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0g
ICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICBpc0ltbWVkaWF0ZS5saW5r
KHRoaXMpOwotCi0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6Ok51bGxUYWcpLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QxKTsKLSAgICBvcjMyKHJlZ1QyLCBy
ZWdUMSk7Ci0KLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0KLSAgICBlbWl0U3RvcmVCb29sKGRzdCwg
cmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZDsKLQotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzSW1tZWRp
YXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKLQotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAgSnVtcCB3YXNOb3RN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fcHJv
ZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKLSAg
ICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIEp1bXAgd2Fz
Tm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLQot
ICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxs
VGFnKSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMSk7Ci0gICAgYW5kMzIocmVnVDIsIHJlZ1Qx
KTsKLQotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLQotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdU
MSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BUaHJvdz4oKTsKLSAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwot
ICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCkudG9w
RW50cnlGcmFtZSk7Ci0gICAgZW1pdExvYWQoYnl0ZWNvZGUubV92YWx1ZSwgcmVnVDEsIHJlZ1Qw
KTsKLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgbV9w
cm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCkpOwotICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0oKSk7Ci19Ci0KIHZvaWQgSklUOjpl
bWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+
KCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBlbWl0TG9hZChzcmMs
IHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QxLCBy
ZWdUMCk7CiAKICAgICBKdW1wIGlzSW50MzIgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKICAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6TG93ZXN0VGFnKSkpOwpAQCAtOTE3LDcgKzYzMSw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3RvX251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwogICAgIEpTVmFsdWVSZWdz
IGFyZ3VtZW50VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAKLSAgICBlbWl0TG9hZChzcmMsIHJl
Z1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QxLCByZWdU
MCk7CiAKICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7CiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RIZWFwQmlnSW50KHJlZ1QwKSk7CkBAIC05MzgsNyArNjUy
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwogICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQ7CiAKLSAgICBl
bWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMsIHJlZ1QxLCByZWdUMCk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVn
VDEpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwpAQCAtOTUz
LDcgKzY2Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kOwog
Ci0gICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjLCByZWdUMSwgcmVnVDApOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QxKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsK
QEAgLTEwMjUsNzQgKzczOSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBlbWl0
TG9hZFBheWxvYWQoY3VycmVudFNjb3BlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlclBheWxvYWQoY3VycmVudFNjb3BlLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKICAgICBlbWl0U3RvcmVDZWxs
KGJ5dGVjb2RlLm1fZHN0LCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9p
bW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN3aXRjaEltbT4oKTsKLSAgICBzaXpl
X3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsKLSAgICB1bnNpZ25lZCBkZWZh
dWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVm
YXVsdE9mZnNldCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1f
c2NydXRpbmVlOwotCi0gICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5h
dGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNp
bXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPnVubGlu
a2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBtX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07Ci0gICAgbV9zd2l0Y2hl
cy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVs
dE9mZnNldCwgU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUpKTsKLSAgICBsaW5rZWRUYWJsZS5lbnN1
cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKLQotICAgIGVtaXRMb2FkKHNjcnV0aW5lZSwgcmVn
VDEsIHJlZ1QwKTsKLSAgICBhdXRvIG5vdEludDMyID0gYnJhbmNoSWZOb3RJbnQzMihyZWdUMSk7
Ci0gICAgc3ViMzIoSW1tMzIodW5saW5rZWRUYWJsZS5tX21pbiksIHJlZ1QwKTsKLQotICAgIGFk
ZEp1bXAoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMCwgSW1tMzIobGlua2VkVGFibGUubV9j
dGlPZmZzZXRzLnNpemUoKSkpLCBkZWZhdWx0T2Zmc2V0KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIobGlua2VkVGFibGUubV9jdGlPZmZzZXRzLmRhdGEoKSksIHJlZ1QxKTsKLSAgICBsb2FkUHRy
KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFNjYWxlUHRyKSwgcmVnVDEpOwotICAgIGZhckp1bXAo
cmVnVDEsIE5vUHRyVGFnKTsKLQotICAgIG5vdEludDMyLmxpbmsodGhpcyk7Ci0gICAgY2FsbE9w
ZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uU3dpdGNoSW1tV2l0aFVua25vd25LZXlU
eXBlLCAmdm0oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgdGFibGVJbmRleCwgdW5saW5r
ZWRUYWJsZS5tX21pbik7Ci0gICAgZmFySnVtcChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOwot
fQotCi12b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wU3dpdGNoQ2hhcj4oKTsKLSAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2Rl
Lm1fdGFibGVJbmRleDsKLSAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwotCi0gICAgLy8gY3Jl
YXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNo
IHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRU
YWJsZSA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPnVubGlua2VkU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOwotICAgIFNpbXBsZUp1bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX3N3aXRjaEp1bXBU
YWJsZXNbdGFibGVJbmRleF07Ci0gICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRh
YmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpD
aGFyYWN0ZXIpKTsKLSAgICBsaW5rZWRUYWJsZS5lbnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxl
KTsKLQotICAgIGVtaXRMb2FkKHNjcnV0aW5lZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblN3aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIG1fcHJvZmlsZWRD
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJs
ZUluZGV4LCB1bmxpbmtlZFRhYmxlLm1fbWluKTsKLSAgICBmYXJKdW1wKHJldHVyblZhbHVlR1BS
LCBOb1B0clRhZyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFN3aXRjaFN0cmluZz4oKTsKLSAgICBzaXplX3QgdGFi
bGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsKLSAgICB1bnNpZ25lZCBkZWZhdWx0T2Zm
c2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9m
ZnNldCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRp
bmVlOwotCi0gICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMs
IHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1
bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fcHJvZmlsZWRDb2RlQmxvY2stPnVubGlua2VkU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIFN0cmluZ0p1bXBUYWJsZSYgbGlu
a2VkVGFibGUgPSBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07Ci0gICAgbV9z
d2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwg
ZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKLSAgICBsaW5rZWRUYWJsZS5l
bnN1cmVDVElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKLQotICAgIGVtaXRMb2FkKHNjcnV0aW5lZSwg
cmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dp
dGhVbmtub3duS2V5VHlwZSwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgpOwotICAgIGZhckp1bXAocmV0dXJu
VmFsdWVHUFIsIE5vUHRyVGFnKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBlbWl0RW50ZXJPcHRpbWl6
YXRpb25DaGVjaygpOwpAQCAtMTEwMCw3ICs3NTEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRl
cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIC8vIEV2ZW4gdGhv
dWdoIEpJVCBjb2RlIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50
CiAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNl
c3NhcmlseSBwcm9sb25naW5nCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5n
IEdDIHByZXNzdXJlLgotICAgIGZvciAodW5zaWduZWQgaSA9IENvZGVCbG9jazo6bGxpbnRCYXNl
bGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBpIDwgbV9wcm9maWxlZENv
ZGVCbG9jay0+bnVtVmFycygpOyArK2kpCisgICAgc2l6ZV90IGNvdW50ID0gbV91bmxpbmtlZENv
ZGVCbG9jay0+bnVtVmFycygpOworICAgIGZvciAoc2l6ZV90IGkgPSBDb2RlQmxvY2s6OmxsaW50
QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaSA8IGNvdW50OyAr
K2kpCiAgICAgICAgIGVtaXRTdG9yZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwganNVbmRl
ZmluZWQoKSk7CiAKICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudGVyKTsKQEAgLTExMTYsMTY0ICs3NjgsMTMgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0
ZVRoaXM+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2Zp
bGVkQ29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlID0gYnl0ZWNvZGUubV9j
YWxsZWU7Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZt
ZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKLSAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1Qw
OwotICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsKLSAgICBSZWdpc3RlcklEIHJl
c3VsdFJlZyA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7Ci0g
ICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSByZWdUMjsKLSAgICBSZWdpc3RlcklEIGNhY2hl
ZEZ1bmN0aW9uUmVnID0gcmVnVDQ7Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDM7
Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQoY2FsbGVlLCBjYWxsZWVSZWcpOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVlUmVnKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNz
KGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwg
cmFyZURhdGFSZWcpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmFyZURh
dGFSZWcsIFRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpKTsKLSAgICBsb2Fk
MzIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVXaXRoUHJvdG90eXBl
OjpvZmZzZXRPZkFsbG9jYXRvcigpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBhbGxvY2F0
b3JSZWcpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0
YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGVXaXRoUHJvdG90eXBlOjpvZmZzZXRPZlN0cnVjdHVyZSgpIC0gSlNGdW5jdGlvbjo6cmFy
ZURhdGFUYWcpLCBzdHJ1Y3R1cmVSZWcpOwotCi0gICAgbG9hZFB0cihjYWNoZWRGdW5jdGlvbiwg
Y2FjaGVkRnVuY3Rpb25SZWcpOwotICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcyA9IGJy
YW5jaFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1QdHIoSlNDZWxsOjpz
ZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIo
Tm90RXF1YWwsIGNhbGxlZVJlZywgY2FjaGVkRnVuY3Rpb25SZWcpKTsKLSAgICBoYXNTZWVuTXVs
dGlwbGVDYWxsZWVzLmxpbmsodGhpcyk7Ci0KLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAg
YXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwotICAgIGVtaXRBbGxvY2F0
ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JS
ZWcsIHN0cnVjdHVyZVJlZywgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwotICAg
IGxvYWQ4KEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OmlubGluZUNhcGFjaXR5T2Zm
c2V0KCkpLCBzY3JhdGNoUmVnKTsKLSAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVz
dWx0UmVnLCBzY3JhdGNoUmVnKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVt
aXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZyk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxv
Y2spOwotICAgIFN0cnVjdHVyZUlEKiBjYWNoZWRTdHJ1Y3R1cmVJRCA9ICZtZXRhZGF0YS5tX2Nh
Y2hlZFN0cnVjdHVyZUlEOwotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIgPSBieXRl
Y29kZS5tX3NyY0RzdDsKLQotICAgIGVtaXRMb2FkKHRoaXNSZWdpc3RlciwgcmVnVDMsIHJlZ1Qy
KTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMykpOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90VHlwZShyZWdUMiwgRmluYWxPYmplY3RUeXBlKSk7Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7
Ci0gICAgbG9hZDMyKGNhY2hlZFN0cnVjdHVyZUlELCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIpKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRf
b3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsK
LSAgICBlbWl0TG9hZFRhZyhieXRlY29kZS5tX3RhcmdldFZpcnR1YWxSZWdpc3RlciwgcmVnVDAp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcoYnl0ZWNvZGUubV90YXJnZXRWaXJ0dWFs
UmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsKLSAgICBUeXBlTG9jYXRpb24qIGNhY2hl
ZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOwotICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0VmlydHVhbFJlZ2lzdGVyOwot
Ci0gICAgLy8gTG9hZCBwYXlsb2FkIGluIFQwLiBMb2FkIHRhZyBpbiBUMy4KLSAgICBlbWl0TG9h
ZFBheWxvYWQodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZFRhZyh2YWx1ZVRv
UHJvZmlsZSwgcmVnVDMpOwotCi0gICAgSnVtcExpc3QganVtcFRvRW5kOwotCi0gICAganVtcFRv
RW5kLmFwcGVuZChicmFuY2hJZkVtcHR5KHJlZ1QzKSk7Ci0KLSAgICAvLyBDb21waWxlIGluIGEg
cHJlZGljdGl2ZSB0eXBlIGNoZWNrLCBpZiBwb3NzaWJsZSwgdG8gc2VlIGlmIHdlIGNhbiBza2lw
IHdyaXRpbmcgdG8gdGhlIGxvZy4KLSAgICAvLyBUaGVzZSB0eXBlY2hlY2tzIGFyZSBpbmxpbmVk
IHRvIG1hdGNoIHRob3NlIG9mIHRoZSAzMi1iaXQgSlNWYWx1ZSB0eXBlIGNoZWNrcy4KLSAgICBp
ZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlVW5kZWZpbmVkKQot
ICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmVW5kZWZpbmVkKHJlZ1QzKSk7Ci0gICAg
ZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlTnVsbCkK
LSAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZk51bGwocmVnVDMpKTsKLSAgICBlbHNl
IGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVCb29sZWFuKQot
ICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmQm9vbGVhbihyZWdUMywgSW52YWxpZEdQ
UlJlZykpOwotICAgIGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUg
PT0gVHlwZUFueUludCkKLSAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZkludDMyKHJl
Z1QzKSk7Ci0gICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9
PSBUeXBlTnVtYmVyKSB7Ci0gICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZOdW1iZXIo
SlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QwKSwgcmVnVDEpKTsKLSAgICB9IGVsc2UgaWYgKGNhY2hl
ZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZVN0cmluZykgewotICAgICAgICBK
dW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMyk7Ci0gICAgICAgIGp1bXBUb0Vu
ZC5hcHBlbmQoYnJhbmNoSWZTdHJpbmcocmVnVDApKTsKLSAgICAgICAgaXNOb3RDZWxsLmxpbmso
dGhpcyk7Ci0gICAgfQotCi0gICAgLy8gTG9hZCB0aGUgdHlwZSBwcm9maWxpbmcgbG9nIGludG8g
VDIuCi0gICAgVHlwZVByb2ZpbGVyTG9nKiBjYWNoZWRUeXBlUHJvZmlsZXJMb2cgPSBtX3ZtLT50
eXBlUHJvZmlsZXJMb2coKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY2FjaGVkVHlwZVByb2Zp
bGVyTG9nKSwgcmVnVDIpOwotCi0gICAgLy8gTG9hZCB0aGUgbmV4dCBsb2cgZW50cnkgaW50byBU
MS4KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFR5cGVQcm9maWxlckxvZzo6Y3VycmVudExv
Z0VudHJ5T2Zmc2V0KCkpLCByZWdUMSk7Ci0KLSAgICAvLyBTdG9yZSB0aGUgSlNWYWx1ZSBvbnRv
IHRoZSBsb2cgZW50cnkuCi0gICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhyZWdUMSwgVHlwZVBy
b2ZpbGVyTG9nOjpMb2dFbnRyeTo6dmFsdWVPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1Zh
bHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAgIHN0b3JlMzIocmVnVDMsIEFkZHJlc3MocmVn
VDEsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnZhbHVlT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotCi0gICAgLy8gU3RvcmUgdGhlIHN0cnVj
dHVyZUlEIG9mIHRoZSBjZWxsIGlmIGFyZ3VtZW50IGlzIGEgY2VsbCwgb3RoZXJ3aXNlLCBzdG9y
ZSAwIG9uIHRoZSBsb2cgZW50cnkuCi0gICAgSnVtcCBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QzKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDApOwotICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDEsIFR5cGVQ
cm9maWxlckxvZzo6TG9nRW50cnk6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKLSAgICBKdW1wIHNr
aXBOb3RDZWxsID0ganVtcCgpOwotICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICBzdG9yZTMy
KFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhyZWdUMSwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRy
eTo6c3RydWN0dXJlSURPZmZzZXQoKSkpOwotICAgIHNraXBOb3RDZWxsLmxpbmsodGhpcyk7Ci0K
LSAgICAvLyBTdG9yZSB0aGUgdHlwZUxvY2F0aW9uIG9uIHRoZSBsb2cgZW50cnkuCi0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVMb2NhdGlvbiksIHJlZ1QwKTsKLSAgICBzdG9yZTMy
KHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojpsb2NhdGlv
bk9mZnNldCgpKSk7Ci0KLSAgICAvLyBJbmNyZW1lbnQgdGhlIGN1cnJlbnQgbG9nIGVudHJ5Lgot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnkp
KSwgcmVnVDEpOwotICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDIsIFR5cGVQcm9maWxl
ckxvZzo6Y3VycmVudExvZ0VudHJ5T2Zmc2V0KCkpKTsKLSAgICBqdW1wVG9FbmQuYXBwZW5kKGJy
YW5jaFB0cihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW1QdHIoY2FjaGVkVHlwZVByb2ZpbGVy
TG9nLT5sb2dFbmRQdHIoKSkpKTsKLSAgICAvLyBDbGVhciB0aGUgbG9nIGlmIHdlJ3JlIGF0IHRo
ZSBlbmQgb2YgdGhlIGxvZy4KLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVy
YXRpb25Qcm9jZXNzVHlwZVByb2ZpbGVyTG9nLCAmdm0oKSk7Ci0KLSAgICBqdW1wVG9FbmQubGlu
ayh0aGlzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xv
Z3VlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgUkVMRUFT
RV9BU1NFUlQodm0oKS5zaGFkb3dDaGlja2VuKCkpOwotICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgp
OwotICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9
IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKLSAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5Q
cm9sb2d1ZT4oKTsKLSAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7Ci0gICAgR1BS
UmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3Vt
ZW50IHJlZ2lzdGVyLgotICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwotICAgIGVuc3Vy
ZVNoYWRvd0NoaWNrZW5QYWNrZXQodm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywg
c2NyYXRjaDJSZWcpOwotCi0gICAgc2NyYXRjaDFSZWcgPSByZWdUNDsKLSAgICBlbWl0TG9hZFBh
eWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5Qcm9s
b2d1ZVBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCByZWdUMyk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQodm0oKS5zaGFkb3dD
aGlja2VuKCkpOwotICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwotICAgIHN0YXRpY19hc3NlcnQo
bm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZl
IHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwotICAgIEdQUlJlZyBz
aGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdH
UFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCi0gICAgR1BSUmVn
IHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgp
LCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAgZW1pdExv
YWRQYXlsb2FkKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCByZWdUMik7Ci0gICAgZW1pdExvYWRUYWco
Ynl0ZWNvZGUubV90aGlzVmFsdWUsIHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyB0aGlzUmVncyhy
ZWdUMSwgcmVnVDIpOwotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLCByZWdU
Myk7Ci0gICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0aGlz
UmVncywgcmVnVDMsIFRydXN0ZWRJbW1QdHIobV9wcm9maWxlZENvZGVCbG9jayksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZUluZGV4KSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5k
aWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggOTU3Njk1YjMwZTkzOTliYmEwZTMwZjJlZmY0OTBk
MzBmYjY3Y2I1Zi4uZjAyZjRhYTU5ZDk2YWUxNTU1ZWEzMmVjMWEyZjUxNzA1ZjRiMWU4NiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAg
LTc3NSwxNCArNzc1LDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4g
SklUOjpzbG93X29wX3B1dF9wcml2YXRlX25hbWVfcHJlcGFyZUNhbGxHCiB9CiAjZW5kaWYgLy8g
RU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRHZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNv
ZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvciwg
cmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fYWNj
ZXNzb3IsIHJlZ1QxKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMs
IHJlZ1QxKTsKIH0KQEAgLTc5MCw5ICs3ODgsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0
dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNv
ZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvciwg
cmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fYWNj
ZXNzb3IsIHJlZ1QxKTsKICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QyKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIHJlZ1QyLCByZWdUMCwgbV91bmxpbmtlZENv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMs
IHJlZ1QxKTsKIH0KQEAgLTgwMCwxMCArNzk4LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9z
ZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQg
SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
clBheWxvYWQoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGUg
PSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2dldHRlciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9zZXR0ZXIsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChi
eXRlY29kZS5tX2dldHRlciwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXls
b2FkKGJ5dGVjb2RlLm1fc2V0dGVyLCByZWdUMik7CiAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdU
Myk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QzLCBy
ZWdUMCwgbV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKIH0KQEAgLTgxMSwyNiArODA5LDQw
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVy
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKwor
ICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25QdXRHZXR0ZXJCeVZh
bCk7CisgICAgY29uc3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUlAgPSBwcmVmZXJyZWRBcmd1
bWVudEdQUjxTbG93T3BlcmF0aW9uLCAwPigpOworICAgIGNvbnN0ZXhwciBHUFJSZWcgYmFzZUdQ
UiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDE+KCk7CisgICAgY29uc3Rl
eHByIEpTVmFsdWVSZWdzIHByb3BlcnR5SlNSID0gcHJlZmVycmVkQXJndW1lbnRKU1I8U2xvd09w
ZXJhdGlvbiwgMj4oKTsKKyAgICAvLyBBdHRyaWJ1dGVzIGluIGFyZ3VtZW50IDMKKyAgICBjb25z
dGV4cHIgR1BSUmVnIHNldHRlckdQUiA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRp
b24sIDQ+KCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChieXRlY29kZS5t
X2Jhc2UsIGJhc2VHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSwgcHJvcGVydHlKU1IpOwogICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2Rl
Lm1fYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNj
ZXNzb3IsIHJlZ1QyKTsKLSAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCByZWdUMywgcmVnVDAsIHJlZ1QxLCBhdHRy
aWJ1dGVzLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYnl0ZWNv
ZGUubV9hY2Nlc3Nvciwgc2V0dGVyR1BSKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbE9i
amVjdEdSUCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgZ2xv
YmFsT2JqZWN0R1JQLCBiYXNlR1BSLCBwcm9wZXJ0eUpTUiwgYXR0cmlidXRlcywgc2V0dGVyR1BS
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCByZWdUMSk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVz
ID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwotICAgIGxvYWRHbG9iYWxPYmplY3QocmVnVDMpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1QzLCByZWdUMCwg
cmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKLX0KIAotI2VuZGlmCisgICAgdXNpbmcgU2xvd09w
ZXJhdGlvbiA9IGRlY2x0eXBlKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsKTsKKyAgICBjb25zdGV4
cHIgR1BSUmVnIGdsb2JhbE9iamVjdEdSUCA9IHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVy
YXRpb24sIDA+KCk7CisgICAgY29uc3RleHByIEdQUlJlZyBiYXNlR1BSID0gcHJlZmVycmVkQXJn
dW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMT4oKTsKKyAgICBjb25zdGV4cHIgSlNWYWx1ZVJlZ3Mg
cHJvcGVydHlKU1IgPSBwcmVmZXJyZWRBcmd1bWVudEpTUjxTbG93T3BlcmF0aW9uLCAyPigpOwor
ICAgIC8vIEF0dHJpYnV0ZXMgaW4gYXJndW1lbnQgMworICAgIGNvbnN0ZXhwciBHUFJSZWcgc2V0
dGVyR1BSID0gcHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgND4oKTsKKworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fYmFzZSwgYmFzZUdQUik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5LCBwcm9wZXJ0
eUpTUik7CisgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHNl
dHRlckdQUik7CisgICAgbG9hZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUlApOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIGdsb2JhbE9iamVjdEdSUCwgYmFz
ZUdQUiwgcHJvcGVydHlKU1IsIGF0dHJpYnV0ZXMsIHNldHRlckdQUik7Cit9CiAKIHZvaWQgSklU
OjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewpAQCAtMTk1OCwxMzAgKzE5NzAsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX3By
aXZhdGVfYnJhbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVgogICAg
IGVtaXRIYXNQcml2YXRlU2xvdyhieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRl
Y29kZS5tX2JyYW5kLCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOwogfQogCi0jaWYgVVNF
KEpTVkFMVUU2NCkKLQotdm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0
ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MsIHVuc2lnbmVkIGRlcHRoKQotewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcywgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHJlZ1QwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKLSAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJl
Z1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19Ci0KLQotI2lmICFFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKLXZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKLSAgICBSZXNvbHZl
VHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENv
ZGVCbG9jaykubV9yZXNvbHZlVHlwZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsK
LQotICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMDsKLQotICAgIEp1bXBMaXN0
IHNsb3dDYXNlOwotCi0gICAgYXV0byBkb1ZhckluamVjdGlvbkNoZWNrID0gWyZdIChib29sIG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gSW52YWxpZEdQ
UlJlZykgewotICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0R1BSID09IEludmFsaWRHUFJSZWcp
IHsKLSAgICAgICAgICAgIGdsb2JhbE9iamVjdEdQUiA9IHJlZ1Q0OwotICAgICAgICAgICAgbG9h
ZEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3RHUFIpOwotICAgICAgICB9Ci0gICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhnbG9iYWxPYmplY3RHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0dsb2JhbE9iamVj
dCwgbV92YXJJbmplY3Rpb25XYXRjaHBvaW50KSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2Uu
YXBwZW5kKGJyYW5jaDgoRXF1YWwsIEFkZHJlc3MocmVnVDMsIFdhdGNocG9pbnRTZXQ6Om9mZnNl
dE9mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwotICAgIH07Ci0KLSAg
ICBhdXRvIGVtaXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcykgewotICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKTsKLSAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29w
ZTo6TWV0YWRhdGE6Om9mZnNldE9mTG9jYWxTY29wZURlcHRoKCksIHJlZ1QxKTsKLQotICAgICAg
ICBBU1NFUlQoc2NvcGVHUFIgPT0gcmVnVDApOwotICAgICAgICBMYWJlbCBsb29wID0gbGFiZWwo
KTsKLSAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QxKTsKLSAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1Qw
KTsKLSAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAgICAgIGp1bXAo
KS5saW5rVG8obG9vcCwgdGhpcyk7Ci0gICAgICAgIGRvbmUubGluayh0aGlzKTsKLSAgICB9Owot
Ci0gICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKLSAg
ICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
OgotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewot
ICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jaygpIGxvYWRz
IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkuCi0gICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0
KHJlZ1QwKTsKLSAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rp
b25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkMzJGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZHbG9iYWxM
ZXhpY2FsQmluZGluZ0Vwb2NoKCksIHJlZ1QxKTsKLSAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVu
ZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNHbG9iYWxPYmplY3Q6Om9mZnNl
dE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBHbG9iYWxWYXI6Ci0gICAgICAgIGNhc2Ug
R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhp
Y2FsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7Ci0gICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2Nr
KCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSBmb3IgR2xvYmFsVmFyKiwKLSAgICAg
ICAgICAgIC8vIGFuZCBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQoKSBmb3IgR2xvYmFsTGV4aWNhbFZhciouCi0gICAgICAgICAgICBsb2FkR2xvYmFs
T2JqZWN0KHJlZ1QwKTsKLSAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBpZiAocmVz
b2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9u
bWVudCgpKSwgcmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOgotICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBE
eW5hbWljOgotICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2Ug
TW9kdWxlVmFyOgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICAgICAgY2Fz
ZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBp
ZiAocHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIAotICAgICAgICBsb2FkUHRyRnJv
bU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTGV4
aWNhbEVudmlyb25tZW50KCksIHJlZ1QwKTsKLSAgICBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwotICAgICAgICBpZiAocHJvZmlsZWRSZXNv
bHZlVHlwZSA9PSBDbG9zdXJlVmFyIHx8IHByb2ZpbGVkUmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgICAgICBlbWl0Q29kZShwcm9maWxlZFJl
c29sdmVUeXBlKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNjb3BlLCBzY29wZUdQUik7Ci0KLSAgICAgICAgICAgIEp1bXBMaXN0IHNraXBUb0Vu
ZDsKLSAgICAgICAgICAgIGxvYWQzMkZyb21NZXRhZGF0YShieXRlY29kZSwgT3BSZXNvbHZlU2Nv
cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZlJlc29sdmVUeXBlKCksIHJlZ1QxKTsKLQotICAgICAgICAg
ICAgYXV0byBlbWl0Q2FzZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKLSAgICAg
ICAgICAgICAgICBKdW1wIG5vdENhc2UgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0
ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVU
eXBlKTsKLSAgICAgICAgICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAg
ICAgICAgICAgbm90Q2FzZS5saW5rKHRoaXMpOwotICAgICAgICAgICAgfTsKLQotICAgICAgICAg
ICAgZW1pdENhc2UoR2xvYmFsVmFyKTsKLSAgICAgICAgICAgIGVtaXRDYXNlKEdsb2JhbFByb3Bl
cnR5KTsKLSAgICAgICAgICAgIGVtaXRDYXNlKEdsb2JhbExleGljYWxWYXIpOwotICAgICAgICAg
ICAgZW1pdENhc2UoR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgICAg
ICBlbWl0Q2FzZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAg
ICAgICAgZW1pdENhc2UoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwot
ICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgICAgIHNraXBU
b0VuZC5saW5rKHRoaXMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYWRkU2xvd0Nhc2Uoc2xv
d0Nhc2UpOwotCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotfQotCi0jZWxzZQog
dm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUmVzb2x2ZVNjb3BlPigpOwpAQCAtMjA5NCwyMSArMTk4MiwyMCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgQVNTRVJUKEJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpID09IG1fYnl0ZWNv
ZGVJbmRleCk7CiAgICAgQVNTRVJUKG1fdW5saW5rZWRDb2RlQmxvY2stPmluc3RydWN0aW9uQXQo
bV9ieXRlY29kZUluZGV4KSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogCi0gICAgLy8gSWYgd2Ug
cHJvZmlsZSBjZXJ0YWluIHJlc29sdmUgdHlwZXMsIHdlJ3JlIGdhdXJhbnRlZWQgYWxsIGxpbmtl
ZCBjb2RlIHdpbGwgaGF2ZSB0aGUgc2FtZQorICAgIC8vIElmIHdlIHByb2ZpbGUgY2VydGFpbiBy
ZXNvbHZlIHR5cGVzLCB3ZSdyZSBndWFyYW50ZWVkIGFsbCBsaW5rZWQgY29kZSB3aWxsIGhhdmUg
dGhlIHNhbWUKICAgICAvLyByZXNvbHZlIHR5cGUuCiAKICAgICBpZiAocHJvZmlsZWRSZXNvbHZl
VHlwZSA9PSBNb2R1bGVWYXIpIAotICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2Rl
LCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mTGV4aWNhbEVudmlyb25tZW50KCks
IHJlZ1QwKTsKKyAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BSZXNvbHZl
U2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZkxleGljYWxFbnZpcm9ubWVudCgpLCByZXR1cm5WYWx1
ZUdQUik7CiAgICAgZWxzZSB7CiAgICAgICAgIHVpbnQzMl90IG1ldGFkYXRhT2Zmc2V0ID0gbV91
bmxpbmtlZENvZGVCbG9jay0+bWV0YWRhdGEoKS5vZmZzZXRJbk1ldGFkYXRhVGFibGUoYnl0ZWNv
ZGUpOwogCiAgICAgICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIgPSByZWdUMjsKICAg
ICAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9IHJlZ1QwOwotICAgICAgICBjb25zdGV4
cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDU7CisgICAgICAgIGNvbnN0ZXhwciBH
UFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUMzsKIAotICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNjb3BlLCBzY29wZUdQUik7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJQYXlsb2FkKHNjb3BlLCBzY29wZUdQUik7CiAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
bWV0YWRhdGFPZmZzZXQpLCBzX21ldGFkYXRhR1BSLCBtZXRhZGF0YUdQUik7Ci0KICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoYnl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjb2RlOwpAQCAt
MjEzNCw3ICsyMDIxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBlbWl0TmFrZWROZWFyQ2Fs
bChjb2RlLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CiAgICAgfQogCi0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIGJveENlbGwocmV0dXJuVmFsdWVHUFIsIHJldHVyblZh
bHVlSlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVKU1Ip
OwogfQogCiB0ZW1wbGF0ZSA8UmVzb2x2ZVR5cGUgcHJvZmlsZWRSZXNvbHZlVHlwZT4KQEAgLTIx
NTAsOCArMjAzOCwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJ
VDo6Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZNJiB2bSkKICAgICB1c2luZyBNZXRhZGF0
YSA9IE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTsKICAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFk
YXRhR1BSID0gcmVnVDI7IC8vIGluY29taW5nCiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQ
UiA9IHJlZ1QwOyAvLyBpbmNvbWluZwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZz
ZXRHUFIgPSByZWdUNTsgLy8gaW5jb21pbmcgLSBwYXNzIHRocnUgdG8gc2xvdyBwYXRoLgorICAg
IGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUMzsgLy8gaW5jb21pbmcg
LSBwYXNzIHRocnUgdG8gc2xvdyBwYXRoLgorICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHJlZ1Q1OyAvLyBsb2NhbCB0ZW1wb3JhcnkKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVP
ZmZzZXRHUFIpOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKHJldHVyblZhbHVlR1BSLCBt
ZXRhZGF0YUdQUiwgYnl0ZWNvZGVPZmZzZXRHUFIsIHNjcmF0Y2hHUFIpKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KHNjb3BlR1BSID09IHJldHVyblZhbHVlR1BSKTsgLy8gZW1pdFJlc29sdmVDbG9zdXJl
IGFzc3VtZXMgdGhpcwogCiAgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKIApAQCAtMjE2MSwy
MyArMjA1MiwyMyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6
Z2VuZXJhdGVPcFJlc29sdmVTY29wZVRodW5rKFZNJiB2bSkKICAgICAgICAgaWYgKCFuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKGdsb2Jh
bE9iamVjdEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7Ci0gICAgICAgICAgICBnbG9iYWxPYmplY3RH
UFIgPSByZWdUNDsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVz
cyhyZWdUMywgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0
R1BSKTsKKyAgICAgICAgICAgIGdsb2JhbE9iamVjdEdQUiA9IHNjcmF0Y2hHUFI7CisgICAgICAg
ICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBD
b2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwogICAg
ICAgICB9Ci0gICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0R1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludCkpLCBy
ZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoOChFcXVhbCwgQWRkcmVz
cyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElz
SW52YWxpZGF0ZWQpKSk7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoZ2xvYmFsT2JqZWN0
R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0aW9uV2F0Y2hw
b2ludCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2g4
KEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhdGNocG9pbnRTZXQ6Om9mZnNldE9mU3RhdGUo
KSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOwogICAgIH07CiAKICAgICBhdXRvIGVt
aXRSZXNvbHZlQ2xvc3VyZSA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewog
ICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAg
ICAgICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZM
b2NhbFNjb3BlRGVwdGgoKSksIHJlZ1QxKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NvcGVH
UFIgPT0gcmVnVDApOworICAgICAgICBqaXQubG9hZDMyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1l
dGFkYXRhOjpvZmZzZXRPZkxvY2FsU2NvcGVEZXB0aCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHNjb3BlR1BSID09IHJldHVyblZhbHVlR1BSKTsKIAogICAgICAgICBM
YWJlbCBsb29wID0gaml0LmxhYmVsKCk7Ci0gICAgICAgIEp1bXAgZG9uZSA9IGppdC5icmFuY2hU
ZXN0MzIoWmVybywgcmVnVDEpOwotICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICAgICAgaml0LnN1YjMyKFRydXN0
ZWRJbW0zMigxKSwgcmVnVDEpOworICAgICAgICBKdW1wIGRvbmUgPSBqaXQuYnJhbmNoVGVzdDMy
KFplcm8sIHNjcmF0Y2hHUFIpOworICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJldHVyblZh
bHVlR1BSLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJldHVyblZhbHVlR1BSKTsKKyAgICAg
ICAgaml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIGppdC5q
dW1wKCkubGlua1RvKGxvb3AsICZqaXQpOwogICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAg
fTsKQEAgLTIxODcsMTEgKzIwNzgsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BSZXNvbHZlU2NvcGVUaHVuayhWTSYgdm0pCiAgICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAvLyBKU1Njb3BlOjpjb25zdGFudFNjb3Bl
Rm9yQ29kZUJsb2NrKCkgbG9hZHMgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS4KLSAgICAgICAg
ICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVn
VDMpOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2NrOjpv
ZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZG9WYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKLSAg
ICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNl
dE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNHbG9i
YWxPYmplY3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgcmVnVDEpKTsK
KyAgICAgICAgICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHNjcmF0
Y2hHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIHJldHVyblZhbHVlR1BS
KTsKKyAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBqaXQubG9hZDMy
KEFkZHJlc3MobWV0YWRhdGFHUFIsIE1ldGFkYXRhOjpvZmZzZXRPZkdsb2JhbExleGljYWxCaW5k
aW5nRXBvY2goKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGpp
dC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhyZXR1cm5WYWx1ZUdQUiwgSlNHbG9iYWxPYmpl
Y3Q6Om9mZnNldE9mR2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpKSwgc2NyYXRjaEdQUikpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMjIwMSwxMSArMjA5MiwxMSBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6Z2VuZXJhdGVPcFJlc29s
dmVTY29wZVRodW5rKFZNJiB2bSkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gSlNTY29wZTo6Y29uc3RhbnRTY29w
ZUZvckNvZGVCbG9jaygpIGxvYWRzIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkgZm9yIEdsb2Jh
bFZhciosCiAgICAgICAgICAgICAvLyBhbmQgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsTGV4aWNhbEVudmlyb25tZW50KCkgZm9yIEdsb2JhbExleGljYWxWYXIqLgotICAgICAgICAg
ICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdU
MCk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBDb2RlQmxvY2s6Om9m
ZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBkb1ZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQ
UiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmV0dXJuVmFsdWVHUFIpOwor
ICAgICAgICAgICAgZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSksIHJldHVyblZhbHVlR1BSKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlw
ZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVu
dCgpKSwgcmVnVDApOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmV0dXJu
VmFsdWVHUFIsIEpTR2xvYmFsT2JqZWN0OjpvZmZzZXRPZkdsb2JhbExleGljYWxFbnZpcm9ubWVu
dCgpKSwgcmV0dXJuVmFsdWVHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAtMjI4NCwyNCArMjE3NSwyNSBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2Vu
ZXJhdG9yKFZNJiB2bQogICAgIC8vIFRoZSBmYXN0IHBhdGggYWxyZWFkeSBwdXNoZWQgdGhlIHJl
dHVybiBhZGRyZXNzLgogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0ZXJz
OjplYnApOwotI2VsaWYgQ1BVKEFSTTY0KQorI2VsaWYgQ1BVKEFSTTY0KSB8fCBDUFUoQVJNX1RI
VU1CMikKICAgICBqaXQucHVzaFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rl
cik7CisjZWxpZiBDUFUoTUlQUykKKyAgICBqaXQucHVzaFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0
ZXIsIHJldHVybkFkZHJlc3NSZWdpc3Rlcik7CisjZWxzZQorIyAgIGVycm9yICJOb3QgaW1wbGVt
ZW50ZWQgb24gcGxhdGZvcm0iCiAjZW5kaWYKIAotICAgIGNvbnN0ZXhwciBHUFJSZWcgaW5jb21p
bmdCeXRlY29kZU9mZnNldEdQUiA9IHJlZ1Q1OworICAgIGNvbnN0ZXhwciBHUFJSZWcgaW5jb21p
bmdCeXRlY29kZU9mZnNldEdQUiA9IHJlZ1QzOwogICAgIGppdC5zdG9yZTMyKGluY29taW5nQnl0
ZWNvZGVPZmZzZXRHUFIsIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcykpOwogCi0gICAgY29uc3RleHByIEdQUlJlZyBjb2RlQmxvY2tHUFIgPSBhcmd1bWVu
dEdQUjM7CisgICAgY29uc3RleHByIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7CiAgICAgY29u
c3RleHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgPSBhcmd1bWVudEdQUjA7CiAgICAgY29uc3Rl
eHByIEdQUlJlZyBpbnN0cnVjdGlvbkdQUiA9IGFyZ3VtZW50R1BSMTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KG5vT3ZlcmxhcChpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSLCBzY3JhdGNoR1BSICwgZ2xv
YmFsT2JqZWN0R1BSLCBpbnN0cnVjdGlvbkdQUikpOwogCi0gICAgc3RhdGljX2Fzc2VydChpbmNv
bWluZ0J5dGVjb2RlT2Zmc2V0R1BSICE9IGNvZGVCbG9ja0dQUik7Ci0gICAgc3RhdGljX2Fzc2Vy
dChpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSICE9IGdsb2JhbE9iamVjdEdQUik7Ci0gICAgc3Rh
dGljX2Fzc2VydChpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSICE9IGluc3RydWN0aW9uR1BSKTsK
LQotICAgIGppdC5sb2FkUHRyKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwg
Y29kZUJsb2NrR1BSKTsKLSAgICBqaXQubG9hZFB0cihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29k
ZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICBq
aXQubG9hZFB0cihBZGRyZXNzKGNvZGVCbG9ja0dQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkluc3Ry
dWN0aW9uc1Jhd1BvaW50ZXIoKSksIGluc3RydWN0aW9uR1BSKTsKKyAgICBqaXQubG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHNjcmF0Y2hHUFIpOworICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2JhbE9i
amVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHNjcmF0
Y2hHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBpbnN0
cnVjdGlvbkdQUik7CiAgICAgaml0LmFkZFB0cihpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSLCBp
bnN0cnVjdGlvbkdQUik7CiAKICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0
aW9uUmVzb2x2ZVNjb3BlRm9yQmFzZWxpbmUpPihnbG9iYWxPYmplY3RHUFIsIGluc3RydWN0aW9u
R1BSKTsKQEAgLTIzMTEsOCArMjIwMywxMiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJiB2bQogCiAj
aWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucG9wKFg4NlJlZ2lzdGVyczo6ZWJwKTsKLSNlbGlmIENQ
VShBUk02NCkKLSAgICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lz
dGVyLCBDQ2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rlcik7CisjZWxpZiBDUFUoQVJNNjQpIHx8IENQ
VShBUk1fVEhVTUIyKQorICAgIGppdC5wb3BQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5r
UmVnaXN0ZXIpOworI2VsaWYgQ1BVKE1JUFMpCisgICAgaml0LnBvcFBhaXIoZnJhbWVQb2ludGVy
UmVnaXN0ZXIsIHJldHVybkFkZHJlc3NSZWdpc3Rlcik7CisjZWxzZQorIyAgIGVycm9yICJOb3Qg
aW1wbGVtZW50ZWQgb24gcGxhdGZvcm0iCiAjZW5kaWYKICAgICBqaXQucmV0KCk7CiAKQEAgLTIz
MjIsMTcyICsyMjE4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6OnNsb3dfb3BfcmVzb2x2ZV9zY29wZUdlbmVyYXRvcihWTSYgdm0KICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGV4Y2VwdGlvbkNoZWNrLCBDb2RlTG9jYXRpb25MYWJlbChoYW5kbGVyLnJldGFnZ2Vk
Q29kZTxOb1B0clRhZz4oKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBzbG93X29wX3Jlc29sdmVfc2NvcGUiKTsKIH0K
LSNlbmRpZiAvLyAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAKLXZvaWQgSklUOjplbWl0TG9h
ZFdpdGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0
cnVjdHVyZVNsb3QpCi17Ci0gICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCByZWdUMSk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3Ry
dWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMSkpOwotfQotCi12b2lkIEpJVDo6ZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFs
dWUqIG9wZXJhbmQsIEdQUlJlZyByZWcpCi17Ci0gICAgbG9hZFB0cihvcGVyYW5kLCByZWcpOwot
fQotCi12b2lkIEpJVDo6ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9w
ZXJhbmQsIEdQUlJlZyByZWcpCi17Ci0gICAgbG9hZFB0cihvcGVyYW5kLCByZWcpOwotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWcpLCByZWcpOwotfQotCi12b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVW
YXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCkKLXsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOwotfQotCi0jaWYgIUVOQUJMRShFWFRSQV9DVElf
VEhVTktTKQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUu
bV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSBwcm9maWxlZFJlc29sdmVUeXBlID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jaykubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7
Ci0KLSAgICBjb25zdGV4cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDI7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzY29wZSwgc2NvcGVHUFIpOwotCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2U7
Ci0KLSAgICBhdXRvIGRvVmFySW5qZWN0aW9uQ2hlY2sgPSBbJl0gKGJvb2wgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MpIHsKLSAgICAgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbG9hZEdsb2JhbE9iamVjdChyZWdUMyk7Ci0gICAg
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0
LCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQpKSwgcmVnVDMpOwotICAgICAgICBzbG93Q2FzZS5h
cHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0
T2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7Ci0gICAgfTsKLSAgICAK
LSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewotICAg
ICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6
Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0g
ICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ug
d2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmpl
Y3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUg
dmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUs
IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgcmVnVDEpOwot
ICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsK
LSAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoYnJhbmNoMzIo
Tm90RXF1YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QxKSk7Ci0KLSAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lk
KT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCByZWdUMyk7Ci0gICAgICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QzLCBDb2RlQmxvY2s6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCByZWdU
Myk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgc2NvcGVHUFIsIHJl
Z1QzKTsKLSAgICAgICAgICAgIH0pKTsKLQotICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0
YShieXRlY29kZSwgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwg
cmVnVDEpOwotCi0gICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKLSAgICAgICAgICAg
ICAgICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCByZWdU
MSwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAg
YWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAgICAg
ICBpc091dE9mTGluZS5saW5rKHRoaXMpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJl
Z1QwKTsKLSAgICAgICAgICAgIG5lZzMyKHJlZ1QxKTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQz
MlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1Qw
LCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSwgcmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBHbG9iYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgotICAgICAgICBj
YXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAg
ZG9WYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkp
OwotICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BHZXRGcm9tU2Nv
cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDApOwotICAgICAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwKSwgcmVnVDApOwotICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBl
ID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBzbG93
Q2FzZS5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0
YWRhdGEoYnl0ZWNvZGUsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5k
KCksIHJlZ1QzKTsKLSAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoMSA8PCAzID09IHNpemVvZihS
ZWdpc3RlcikpOwotICAgICAgICAgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCByZWdUMyk7
Ci0gICAgICAgICAgICBhZGRQdHIoc2NvcGVHUFIsIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMywgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVz
KCkpLCByZWdUMCk7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIER5bmFtaWM6
Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBNb2R1bGVW
YXI6Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgICAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGlmIChwcm9m
aWxlZFJlc29sdmVUeXBlID09IENsb3N1cmVWYXIgfHwgcHJvZmlsZWRSZXNvbHZlVHlwZSA9PSBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgZW1pdENvZGUocHJvZmls
ZWRSZXNvbHZlVHlwZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsK
LSAgICAgICAgbG9hZDMyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEZyb21TY29wZTo6TWV0
YWRhdGE6Om9mZnNldE9mR2V0UHV0SW5mbygpLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0
ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlw
ZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxWYXIgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xv
YmFsVmFyKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RH
bG9iYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb24gPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
Ci0gICAgICAgIG5vdEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb24ubGluayh0aGlzKTsKLQotICAg
ICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgaXNHbG9i
YWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xv
YmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7Ci0g
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNh
bFZhci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUo
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqdW1wKCkpOwot
Ci0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwotICAgIH0KLQotICAgIGFkZFNsb3dDYXNl
KHNsb3dDYXNlKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlZ1Qw
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJv
bVNjb3BlPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLQot
ICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKLSAgICBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUsIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBhcmd1bWVudEdQ
UjAsIGluc3RydWN0aW9uKTsKLX0KLQotI2Vsc2UKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9t
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CkBA
IC0yNTAyLDExICsyMjMzLDExIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICBjb25zdGV4cHIgR1BS
UmVnIG1ldGFkYXRhR1BSID0gcmVnVDQ7CiAgICAgY29uc3RleHByIEdQUlJlZyBzY29wZUdQUiA9
IHJlZ1QyOwotICAgIGNvbnN0ZXhwciBHUFJSZWcgYnl0ZWNvZGVPZmZzZXRHUFIgPSByZWdUNTsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDM7CiAKICAgICB1
aW50MzJfdCBtZXRhZGF0YU9mZnNldCA9IG1fdW5saW5rZWRDb2RlQmxvY2stPm1ldGFkYXRhKCku
b2Zmc2V0SW5NZXRhZGF0YVRhYmxlKGJ5dGVjb2RlKTsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9h
ZChzY29wZSwgc2NvcGVHUFIpOwogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWV0YWRhdGFPZmZz
ZXQpLCBzX21ldGFkYXRhR1BSLCBtZXRhZGF0YUdQUik7CiAgICAgbW92ZShUcnVzdGVkSW1tMzIo
Ynl0ZWNvZGVPZmZzZXQpLCBieXRlY29kZU9mZnNldEdQUik7CiAKQEAgLTI1MjksNyArMjI2MCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGNvZGUgPSB2bS5nZXRDVElTdHViKGdlbmVyYXRl
T3BHZXRGcm9tU2NvcGVUaHVuazxHbG9iYWxWYXI+KTsKIAogICAgIGVtaXROYWtlZE5lYXJDYWxs
KGNvZGUucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJldHVyblZhbHVlSlNS
KTsKIH0KIAogdGVtcGxhdGUgPFJlc29sdmVUeXBlIHByb2ZpbGVkUmVzb2x2ZVR5cGU+CkBAIC0y
NTQyLDYgKzIyNzMsMTAgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBK
SVQ6OmdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYgdm0pCiAgICAgdXNpbmcgTWV0YWRh
dGEgPSBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE7CiAgICAgY29uc3RleHByIEdQUlJlZyBtZXRh
ZGF0YUdQUiA9IHJlZ1Q0OwogICAgIGNvbnN0ZXhwciBHUFJSZWcgc2NvcGVHUFIgPSByZWdUMjsK
KyAgICBjb25zdGV4cHIgR1BSUmVnIGJ5dGVjb2RlT2Zmc2V0R1BSID0gcmVnVDM7IC8vIFVzZWQg
b25seSBvbiBzbG93IHBhdGgKKyAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdU
NTsKKyAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVPZmZzZXRHUFIpOworICAgIHN0YXRpY19hc3Nl
cnQobm9PdmVybGFwKHJldHVyblZhbHVlSlNSLCBtZXRhZGF0YUdQUiwgc2NvcGVHUFIsIGJ5dGVj
b2RlT2Zmc2V0R1BSLCBzY3JhdGNoR1BSKSk7CiAKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCkBA
IC0yNTUyLDEwICsyMjg3LDEwIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gSklUOjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtKQogICAgIGF1dG8gZG9W
YXJJbmplY3Rpb25DaGVjayA9IFsmXSAoYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykgewog
ICAgICAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
ayksIHJlZ1QzKTsKLSAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhyZWdUMywgQ29kZUJsb2Nr
OjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgcmVnVDMpOwotICAgICAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoSlNHbG9iYWxPYmplY3QsIG1fdmFySW5qZWN0
aW9uV2F0Y2hwb2ludCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJh
bmNoOChFcXVhbCwgQWRkcmVzcyhyZWdUMywgV2F0Y2hwb2ludFNldDo6b2Zmc2V0T2ZTdGF0ZSgp
KSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7CisgICAgICAgIGppdC5sb2FkUHRyKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgc2NyYXRjaEdQUik7CisgICAgICAg
IGppdC5sb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgQ29kZUJsb2NrOjpvZmZzZXRPZkdsb2Jh
bE9iamVjdCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Moc2Ny
YXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTR2xvYmFsT2JqZWN0LCBtX3ZhckluamVjdGlvbldh
dGNocG9pbnQpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJh
bmNoOChFcXVhbCwgQWRkcmVzcyhzY3JhdGNoR1BSLCBXYXRjaHBvaW50U2V0OjpvZmZzZXRPZlN0
YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKICAgICB9OwogICAgIAogICAg
IGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CkBAIC0yNTYz
LDI5ICsyMjk4LDI4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklU
OjpnZW5lcmF0ZU9wR2V0RnJvbVNjb3BlVGh1bmsoVk0mIHZtKQogICAgICAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewogICAgICAgICAgICAgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0
aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUg
R2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2lu
ZyBmb3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBqaXQubG9hZFB0cihBZGRyZXNz
KG1ldGFkYXRhR1BSLCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mU3RydWN0dXJl
KCkpLCByZWdUMSk7Ci0gICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaFRlc3RQ
dHIoWmVybywgcmVnVDEpKTsKLSAgICAgICAgICAgIGppdC5sb2FkMzIoQWRkcmVzcyhyZWdUMSwg
U3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgICAgICAgICAgc2xv
d0Nhc2UuYXBwZW5kKGppdC5icmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhzY29wZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6b2Zmc2V0
T2ZTdHJ1Y3R1cmUoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2UuYXBwZW5k
KGppdC5icmFuY2hUZXN0UHRyKFplcm8sIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIGppdC5s
b2FkMzIoQWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuYnJhbmNoMzIo
Tm90RXF1YWwsIEFkZHJlc3Moc2NvcGVHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpKTsKIAogICAgICAgICAgICAgaml0LmppdEFzc2VydChzY29wZWRMYW1iZGE8
SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgewotICAgICAgICAgICAgICAgIGppdC5sb2FkUHRy
KGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSwgcmVnVDMpOwotICAgICAgICAg
ICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MocmVnVDMsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9i
YWxPYmplY3QoKSksIHJlZ1QzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gaml0LmJyYW5jaFB0
cihFcXVhbCwgc2NvcGVHUFIsIHJlZ1QzKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Moc2NyYXRjaEdQUiwgQ29kZUJsb2NrOjpvZmZz
ZXRPZkdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGppdC5icmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAg
IH0pKTsKIAotICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0
YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDEpOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgc2Ny
YXRjaEdQUik7CiAKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgewotICAgICAgICAg
ICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBqaXQuYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFs
LCByZWdUMSwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAgICAg
ICAgICAgSnVtcCBpc091dE9mTGluZSA9IGppdC5icmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWws
IHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwogICAgICAg
ICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwog
ICAgICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsoJmppdCk7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5uZWczMihyZWdUMSk7Ci0g
ICAgICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICAgICAg
ICAgIGppdC5sb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgcmVnVDApOwor
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhzY29wZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgc2NvcGVHUFIpOworICAgICAgICAgICAgaml0Lm5lZ1B0cihzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQmFzZUluZGV4KHNjb3BlR1BSLCBzY3Jh
dGNoR1BSLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpLCByZXR1cm5WYWx1ZUpTUik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKQEAgLTI1OTMsMjAgKzIzMjcsMTYgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRG
cm9tU2NvcGVUaHVuayhWTSYgdm0pCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAg
ICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAg
ICAgICAgIGRvVmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpKTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEFkZHJlc3MobWV0YWRhdGFHUFIsIE1l
dGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGppdC5sb2Fk
UHRyKEFkZHJlc3MocmVnVDApLCByZWdUMCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBZGRy
ZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCkpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgIGppdC5sb2FkVmFsdWUoQWRkcmVzcyhzY3JhdGNoR1BSKSwgcmV0dXJu
VmFsdWVKU1IpOwogICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxW
YXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJy
YW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZS5hcHBlbmQoaml0
LmJyYW5jaElmRW1wdHkocmV0dXJuVmFsdWVKU1IpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6CiAgICAgICAgICAgICBkb1ZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihBZGRy
ZXNzKG1ldGFkYXRhR1BSLCAgTWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpKSwgcmVnVDMpOwot
ICAgICAgICAgICAgc3RhdGljX2Fzc2VydCgxIDw8IDMgPT0gc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0g
ICAgICAgICAgICBqaXQubHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCByZWdUMyk7Ci0gICAgICAg
ICAgICBqaXQuYWRkUHRyKHNjb3BlR1BSLCByZWdUMyk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0
cihBZGRyZXNzKHJlZ1QzLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMo
KSksIHJlZ1QwKTsKLQorICAgICAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhtZXRhZGF0YUdQ
UiwgIE1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgaml0LmxvYWRWYWx1ZShCYXNlSW5kZXgoc2NvcGVHUFIsIHNjcmF0Y2hHUFIsIFRpbWVzRWln
aHQsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmV0dXJuVmFs
dWVKU1IpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKICAgICAg
ICAgICAgIHNsb3dDYXNlLmFwcGVuZChqaXQuanVtcCgpKTsKQEAgLTI2MjMsMTEgKzIzNTMsMTEg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BH
ZXRGcm9tU2NvcGVUaHVuayhWTSYgdm0pCiAgICAgICAgIGVtaXRDb2RlKHByb2ZpbGVkUmVzb2x2
ZVR5cGUpOwogICAgIGVsc2UgewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAg
IGppdC5sb2FkMzIoQWRkcmVzcyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mR2V0UHV0
SW5mbygpKSwgcmVnVDApOwotICAgICAgICBqaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dElu
Zm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKyAgICAg
ICAgaml0LmxvYWQzMihBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZHZXRQ
dXRJbmZvKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0LmFuZDMyKFRydXN0ZWRJbW0zMihH
ZXRQdXRJbmZvOjp0eXBlQml0cyksIHNjcmF0Y2hHUFIpOyAvLyBMb2FkIFJlc29sdmVUeXBlIGlu
dG8gc2NyYXRjaEdQUgogCiAgICAgICAgIGF1dG8gZW1pdENhc2VXaXRob3V0Q2hlY2sgPSBbJl0g
KFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7Ci0gICAgICAgICAgICBKdW1wIG5vdENhc2UgPSBq
aXQuYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUpKTsK
KyAgICAgICAgICAgIEp1bXAgbm90Q2FzZSA9IGppdC5icmFuY2gzMihOb3RFcXVhbCwgc2NyYXRj
aEdQUiwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBlbWl0Q29kZShy
ZXNvbHZlVHlwZSk7CiAgICAgICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGppdC5qdW1wKCkpOwog
ICAgICAgICAgICAgbm90Q2FzZS5saW5rKCZqaXQpOwpAQCAtMjY2MSw4ICsyMzkxLDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OmdlbmVyYXRlT3BHZXRGcm9t
U2NvcGVUaHVuayhWTSYgdm0pCiAgICAgfQogCiAgICAgc3RhdGljX2Fzc2VydChWYWx1ZVByb2Zp
bGU6Om51bWJlck9mQnVja2V0cyA9PSAxKTsKLSAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVz
cyhtZXRhZGF0YUdQUiwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpICsgVmFsdWVQcm9maWxl
OjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKLQorICAgIGppdC5zdG9yZVZhbHVlKHJldHVyblZh
bHVlSlNSLCBBZGRyZXNzKG1ldGFkYXRhR1BSLCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkg
KyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmlyc3RCdWNrZXQoKSkpOwogICAgIGppdC5yZXQoKTsK
IAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtC
dWZmZXI6OlByb2ZpbGU6OlRodW5rKTsKQEAgLTI2ODAsNDkgKzI0MDksNjYgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVH
ZW5lcmF0b3IoVk0mIHYKIAogI2lmIENQVShYODZfNjQpCiAgICAgaml0LnB1c2goWDg2UmVnaXN0
ZXJzOjplYnApOwotI2VsaWYgQ1BVKEFSTTY0KQorI2VsaWYgQ1BVKEFSTTY0KSB8fCBDUFUoQVJN
X1RIVU1CMikKICAgICBqaXQucHVzaFBhaXIoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdp
c3Rlcik7CisjZWxpZiBDUFUoTUlQUykKKyAgICBqaXQucHVzaFBhaXIoZnJhbWVQb2ludGVyUmVn
aXN0ZXIsIHJldHVybkFkZHJlc3NSZWdpc3Rlcik7CisjZWxzZQorIyAgIGVycm9yICJOb3QgaW1w
bGVtZW50ZWQgb24gcGxhdGZvcm0iCiAjZW5kaWYKIAogICAgIHVzaW5nIE1ldGFkYXRhID0gT3BH
ZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFHUFIg
PSByZWdUNDsKLSAgICBjb25zdGV4cHIgR1BSUmVnIGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIg
PSByZWdUNTsKKyAgICBjb25zdGV4cHIgR1BSUmVnIGluY29taW5nQnl0ZWNvZGVPZmZzZXRHUFIg
PSByZWdUMzsKICAgICBqaXQuc3RvcmUzMihpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSLCB0YWdG
b3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKIAotICAgIGNv
bnN0ZXhwciBHUFJSZWcgY29kZUJsb2NrR1BSID0gYXJndW1lbnRHUFIzOworICAgIGNvbnN0ZXhw
ciBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgZ2xvYmFs
T2JqZWN0R1BSID0gYXJndW1lbnRHUFIwOwogICAgIGNvbnN0ZXhwciBHUFJSZWcgaW5zdHJ1Y3Rp
b25HUFIgPSBhcmd1bWVudEdQUjE7Ci0gICAgc3RhdGljX2Fzc2VydChpbmNvbWluZ0J5dGVjb2Rl
T2Zmc2V0R1BSICE9IGNvZGVCbG9ja0dQUik7Ci0gICAgc3RhdGljX2Fzc2VydChpbmNvbWluZ0J5
dGVjb2RlT2Zmc2V0R1BSICE9IGdsb2JhbE9iamVjdEdQUik7Ci0gICAgc3RhdGljX2Fzc2VydChp
bmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSICE9IGluc3RydWN0aW9uR1BSKTsKLSAgICBzdGF0aWNf
YXNzZXJ0KG1ldGFkYXRhR1BSICE9IGNvZGVCbG9ja0dQUik7Ci0gICAgc3RhdGljX2Fzc2VydCht
ZXRhZGF0YUdQUiAhPSBnbG9iYWxPYmplY3RHUFIpOwotICAgIHN0YXRpY19hc3NlcnQobWV0YWRh
dGFHUFIgIT0gaW5zdHJ1Y3Rpb25HUFIpOworICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKG1l
dGFkYXRhR1BSLCBpbmNvbWluZ0J5dGVjb2RlT2Zmc2V0R1BSLCBzY3JhdGNoR1BSLCBnbG9iYWxP
YmplY3RHUFIsIGluc3RydWN0aW9uR1BSKSk7CiAKLSAgICBqaXQubG9hZFB0cihhZGRyZXNzRm9y
KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayksIGNvZGVCbG9ja0dQUik7Ci0gICAgaml0LmxvYWRQ
dHIoQWRkcmVzcyhjb2RlQmxvY2tHUFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3Qo
KSksIGdsb2JhbE9iamVjdEdQUik7Ci0gICAgaml0LmxvYWRQdHIoQWRkcmVzcyhjb2RlQmxvY2tH
UFIsIENvZGVCbG9jazo6b2Zmc2V0T2ZJbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpLCBpbnN0cnVj
dGlvbkdQUik7CisgICAgaml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spLCBzY3JhdGNoR1BSKTsKKyAgICBqaXQubG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hHUFIs
IENvZGVCbG9jazo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7Cisg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoR1BSLCBDb2RlQmxvY2s6Om9mZnNldE9mSW5z
dHJ1Y3Rpb25zUmF3UG9pbnRlcigpKSwgaW5zdHJ1Y3Rpb25HUFIpOwogICAgIGppdC5hZGRQdHIo
aW5jb21pbmdCeXRlY29kZU9mZnNldEdQUiwgaW5zdHJ1Y3Rpb25HUFIpOwogCi0gICAgQVNTRVJU
KFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkuY29udGFpbnMoR1BSSW5mbzo6bnVt
YmVyVGFnUmVnaXN0ZXIpKTsKLSAgICBqaXQubW92ZShtZXRhZGF0YUdQUiwgR1BSSW5mbzo6bnVt
YmVyVGFnUmVnaXN0ZXIpOyAvLyBQcmVzZXJ2ZSBtZXRhZGF0YSBpbiBhIGNhbGxlZSBzYXZlZCBy
ZWdpc3Rlci4KKyAgICAvLyBQcmVzZXJ2ZSBtZXRhZGF0YSBpbiBhIGNhbGxlZSBzYXZlZCByZWdp
c3Rlci4KKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGNvbnN0ZXhwciBHUFJSZWcgbWV0YWRhdGFD
U1IgPSBHUFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlcjsKKyAgICBhdXRvIHJlc3RvcmVIaWphY2tl
ZENTUiA9IFsmXSgpIHsKKyAgICAgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51
bWJlclRhZyksIEdQUkluZm86Om51bWJlclRhZ1JlZ2lzdGVyKTsKKyAgICB9OworI2VsaWYgVVNF
KEpTVkFMVUUzMl82NCkKKyAgICBjb25zdGV4cHIgR1BSUmVnIG1ldGFkYXRhQ1NSID0gc19tZXRh
ZGF0YUdQUjsKKyAgICBhdXRvIHJlc3RvcmVIaWphY2tlZENTUiA9IFsmXSgpIHsKKyAgICAgICAg
aml0LmxvYWRQdHIoYWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spLCBzX21ldGFk
YXRhR1BSKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQWRkcmVzcyhzX21ldGFkYXRhR1BSLCBDb2Rl
QmxvY2s6Om9mZnNldE9mTWV0YWRhdGFUYWJsZSgpKSwgc19tZXRhZGF0YUdQUik7CisgICAgfTsK
KyNlbmRpZgorICAgIEFTU0VSVChSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpLmNv
bnRhaW5zKG1ldGFkYXRhQ1NSKSk7CisgICAgaml0Lm1vdmUobWV0YWRhdGFHUFIsIG1ldGFkYXRh
Q1NSKTsKKwogICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25HZXRGcm9t
U2NvcGUpPihnbG9iYWxPYmplY3RHUFIsIGluc3RydWN0aW9uR1BSKTsKICAgICBqaXQucHJlcGFy
ZUNhbGxPcGVyYXRpb24odm0pOwogICAgIENhbGwgb3BlcmF0aW9uID0gaml0LmNhbGwoT3BlcmF0
aW9uUHRyVGFnKTsKICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gaml0LmVtaXROb25QYXRjaGFi
bGVFeGNlcHRpb25DaGVjayh2bSk7CiAKLSAgICBqaXQuc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhH
UFJJbmZvOjpudW1iZXJUYWdSZWdpc3RlciwgTWV0YWRhdGE6Om9mZnNldE9mUHJvZmlsZSgpICsg
VmFsdWVQcm9maWxlOjpvZmZzZXRPZkZpcnN0QnVja2V0KCkpKTsKLSAgICBqaXQubW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnKSwgR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0ZXIp
OworICAgIGppdC5zdG9yZVZhbHVlKHJldHVyblZhbHVlSlNSLCBBZGRyZXNzKG1ldGFkYXRhQ1NS
LCBNZXRhZGF0YTo6b2Zmc2V0T2ZQcm9maWxlKCkgKyBWYWx1ZVByb2ZpbGU6Om9mZnNldE9mRmly
c3RCdWNrZXQoKSkpOworICAgIHJlc3RvcmVIaWphY2tlZENTUigpOwogCiAjaWYgQ1BVKFg4Nl82
NCkKICAgICBqaXQucG9wKFg4NlJlZ2lzdGVyczo6ZWJwKTsKLSNlbGlmIENQVShBUk02NCkKKyNl
bGlmIENQVShBUk02NCkgfHwgQ1BVKEFSTV9USFVNQjIpCiAgICAgaml0LnBvcFBhaXIoZnJhbWVQ
b2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CisjZWxpZiBDUFUoTUlQUykKKyAgICBqaXQu
cG9wUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgcmV0dXJuQWRkcmVzc1JlZ2lzdGVyKTsKKyNl
bHNlCisjICAgZXJyb3IgIk5vdCBpbXBsZW1lbnRlZCBvbiBwbGF0Zm9ybSIKICNlbmRpZgogICAg
IGppdC5yZXQoKTsKIAogICAgIGV4Y2VwdGlvbkNoZWNrLmxpbmsoJmppdCk7Ci0gICAgaml0Lm1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyksIEdQUkluZm86Om51bWJlclRhZ1Jl
Z2lzdGVyKTsKKyAgICByZXN0b3JlSGlqYWNrZWRDU1IoKTsKICAgICBKdW1wIGp1bXBUb0hhbmRs
ZXIgPSBqaXQuanVtcCgpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JB
TF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CkBAIC0yNzMx
LDcgKzI0NzcsNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6
c2xvd19vcF9nZXRfZnJvbV9zY29wZUdlbmVyYXRvcihWTSYgdgogICAgIHBhdGNoQnVmZmVyLmxp
bmsoanVtcFRvSGFuZGxlciwgQ29kZUxvY2F0aW9uTGFiZWwoaGFuZGxlci5yZXRhZ2dlZENvZGU8
Tm9QdHJUYWc+KCkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklU
VGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9nZXRfZnJvbV9zY29wZSIpOwogfQotI2Vu
ZGlmIC8vICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CkBAIC0y
NzQ3LDIzICsyNDkyLDI4IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgLy8gU3RydWN0dXJlIGNo
ZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMg
Zm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LgogICAgICAgICAgICAgLy8gQWRkaXRp
b25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0
aW9uLgotICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Nj
b3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSwgcmVnVDEpOwotICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOwotICAgICAgICAgICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworICAgICAgICAgICAgY29uc3Rl
eHByIEpTVmFsdWVSZWdzIHZhbHVlSlNSID0ganNSZWdUMTA7CisgICAgICAgICAgICBjb25zdGV4
cHIgR1BSUmVnIHNjb3BlR1BSID0gcmVnVDI7CisgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVn
IHNjcmF0Y2hHUFIxID0gcmVnVDM7CisgICAgICAgICAgICBjb25zdGV4cHIgR1BSUmVnIHNjcmF0
Y2hHUFIyID0gcmVnVDQ7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcCh2YWx1
ZUpTUiwgc2NvcGVHUFIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMikpOworICAgICAgICAgICAg
bG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zm
c2V0T2ZTdHJ1Y3R1cmUoKSwgc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlclBheWxvYWQoc2NvcGUsIHNjb3BlR1BSKTsKKyAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFRlc3RQdHIoWmVybywgc2NyYXRjaEdQUjEpKTsKKyAgICAgICAgICAgIGxvYWQz
MihBZGRyZXNzKHNjcmF0Y2hHUFIxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSMSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwg
QWRkcmVzcyhzY29wZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQ
UjEpKTsKIAotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIp
OworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgdmFsdWVKU1IpOwog
CiAgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAt
PiBKdW1wIHsKLSAgICAgICAgICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KHJlZ1QzKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgcmVnVDMpOworICAgICAg
ICAgICAgICAgIGxvYWRHbG9iYWxPYmplY3Qoc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAg
IHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHNjb3BlR1BSLCBzY3JhdGNoR1BSMik7CiAgICAgICAg
ICAgICB9KSk7CiAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOwotICAgICAgICAgICAgbG9hZFB0ckZyb21NZXRh
ZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5kKCks
IHJlZ1QxKTsKLSAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0
cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3Moc2NvcGVHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNj
cmF0Y2hHUFIyKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
UHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCBzY3JhdGNoR1BSMSk7Cisg
ICAgICAgICAgICBuZWdQdHIoc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgc3RvcmVWYWx1ZSh2
YWx1ZUpTUiwgQmFzZUluZGV4KHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMSwgVGltZXNFaWdodCwg
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiAg
ICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFs
dWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI3NzEsMjIgKzI1MjEsMjMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICBjYXNlIEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCByZWdU
MCk7Ci0gICAgICAgICAgICBlbWl0VmFyUmVhZE9ubHlDaGVjayhyZXNvbHZlVHlwZSwgcmVnVDAp
OworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAoanNSZWdUMTAsIHJlZ1QyLCBy
ZWdUMykpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDIpOworICAgICAgICAgICAgZW1pdFZhclJlYWRP
bmx5Q2hlY2socmVzb2x2ZVR5cGUsIHJlZ1QyKTsKIAotICAgICAgICAgICAgbG9hZFB0ckZyb21N
ZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b2Zmc2V0T2ZPcGVyYW5k
KCksIHJlZ1QwKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9tTWV0YWRhdGEoYnl0ZWNvZGUsIE9w
UHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mT3BlcmFuZCgpLCByZWdUMik7CiAKICAgICAg
ICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihieXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlh
bGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJl
c29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewog
ICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNl
IHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNh
bGx5LgotICAgICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCksIHJlZ1QxKTsKLSAg
ICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QxKSk7CisgICAgICAg
ICAgICAgICAgbG9hZFZhbHVlKEFkZHJlc3MocmVnVDIpLCBqc1JlZ1QxMCk7CisgICAgICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShqc1JlZ1QxMCkpOwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2Nv
cGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldhdGNocG9pbnRTZXQoKSwgcmVnVDEpOwotICAgICAgICAg
ICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMSk7CisgICAgICAgICAgICBsb2FkUHRy
RnJvbU1ldGFkYXRhKGJ5dGVjb2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZldh
dGNocG9pbnRTZXQoKSwgcmVnVDMpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hw
b2ludChyZWdUMyk7CiAKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDApKTsKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGpzUmVnVDEwKTsKKyAgICAg
ICAgICAgIHN0b3JlVmFsdWUoanNSZWdUMTAsIEFkZHJlc3MocmVnVDIpKTsKIAogICAgICAgICAg
ICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMjc5NCwxNCArMjU0NSwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICAgICAgY2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoK
ICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSksIHJlZ1QwKTsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQobm9PdmVybGFwKGpzUmVn
VDEwLCByZWdUMiwgcmVnVDMpKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QzKTsKIAotICAgICAgICAg
ICAgbG9hZFB0ckZyb21NZXRhZGF0YShieXRlY29kZSwgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6
b2Zmc2V0T2ZXYXRjaHBvaW50U2V0KCksIHJlZ1QwKTsKKyAgICAgICAgICAgIGxvYWRQdHJGcm9t
TWV0YWRhdGEoYnl0ZWNvZGUsIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9mZnNldE9mV2F0Y2hw
b2ludFNldCgpLCByZWdUMyk7CiAgICAgICAgICAgICBsb2FkUHRyRnJvbU1ldGFkYXRhKGJ5dGVj
b2RlLCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvZmZzZXRPZk9wZXJhbmQoKSwgcmVnVDIpOwot
ICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRlV2F0Y2hwb2ludChyZWdUMCk7Ci0gICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgICAgICAgICBzdG9yZTY0KHJl
Z1QxLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBKU0xleGljYWxFbnZpcm9u
bWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSkpOworICAgICAgICAgICAgZW1pdE5vdGlmeVdyaXRl
V2F0Y2hwb2ludChyZWdUMyk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCBqc1JlZ1QxMCk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9h
ZChzY29wZSwgcmVnVDMpOworICAgICAgICAgICAgc3RvcmVWYWx1ZShqc1JlZ1QxMCwgQmFzZUlu
ZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNl
dE9mVmFyaWFibGVzKCkpKTsKIAogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwg
dmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjk0OCwx
MCArMjcwMCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJn
dW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUu
bV9pbmRleDsKICAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVn
VDApOwotICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VP
ZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpLCByZWdUMCk7
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyUGF5bG9h
ZChhcmd1bWVudHMsIHJlZ1QwKTsKKyAgICBsb2FkVmFsdWUoQWRkcmVzcyhyZWdUMCwgRGlyZWN0
QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pKSwganNSZWdUMTApOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUsIGpzUmVnVDEwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwganNSZWdUMTAp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yOTYwLDUxICsyNzEyLDE1IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1
bWVudHM7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDEpOwotICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDAsIERpcmVjdEFy
Z3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSkpOworCisgICAgc3RhdGljX2Fzc2VydChub092ZXJsYXAocmVnVDIsIGpzUmVnVDEw
KSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlclBheWxvYWQoYXJndW1lbnRzLCByZWdUMik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwganNSZWdUMTApOworICAgIHN0b3Jl
VmFsdWUoanNSZWdUMTAsIEFkZHJlc3MocmVnVDIsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9m
ZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwogCiAgICAg
ZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmly
dHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCi17Ci0gICAgLy8gdmFs
dWUgbWF5IGJlIGludmFsaWQgVmlydHVhbFJlZ2lzdGVyIGlmIG1vZGUgaXMgVW5jb25kaXRpb25h
bFdyaXRlQmFycmllciBvciBTaG91bGRGaWx0ZXJCYXNlLgotICAgIEp1bXAgdmFsdWVOb3RDZWxs
OwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmls
dGVyQmFzZUFuZFZhbHVlKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
LSAgICB9Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihvd25lciwgcmVnVDApOwot
ICAgIEp1bXAgb3duZXJOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VB
bmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCi0gICAgICAgIG93bmVyTm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVk
T3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKHZtKCksIHJlZ1QwLCByZWdUMSk7Ci0gICAgY2FsbE9w
ZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsICZ2
bSgpLCByZWdUMCk7Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwot
Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hv
dWxkRmlsdGVyQmFzZSkKLSAgICAgICAgb3duZXJOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgaWYg
KG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5k
VmFsdWUpIAotICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBX
cml0ZUJhcnJpZXJNb2RlIG1vZGUpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOwotICAgIEp1bXAgdmFsdWVOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3Vs
ZEZpbHRlclZhbHVlKQotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOwotCi0gICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7Ci0KLSAgICBpZiAobW9kZSA9PSBT
aG91bGRGaWx0ZXJWYWx1ZSkgCi0gICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwotfQot
CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7CkBAIC0zMDEyLDExICsyNzI4LDExIEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDEpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMSwgSlNJbnRlcm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQo
aW5kZXgpKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJQYXlsb2FkKGJhc2Us
IHJlZ1QwKTsKKyAgICBsb2FkVmFsdWUoQWRkcmVzcyhyZWdUMCwgSlNJbnRlcm5hbEZpZWxkT2Jq
ZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpKSwganNSZWdUMTApOwogCi0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVnVDApOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2Rl
LCBqc1JlZ1QxMCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIGpzUmVnVDEwKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0zMDI2LDEyICsyNzQyLDE1IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7
CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0ludGVy
bmFsRmllbGRPYmplY3RJbXBsPD46Om9mZnNldE9mSW50ZXJuYWxGaWVsZChpbmRleCkpKTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChyZWdUMiwganNSZWdUMTApKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyUGF5bG9hZChiYXNlLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwganNSZWdUMTApOworICAgIHN0b3JlVmFsdWUoanNSZWdUMTAsIEFkZHJl
c3MocmVnVDIsIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZp
ZWxkKGluZGV4KSkpOwogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCisKIHZvaWQgSklUOjplbWl0X29w
X2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCk7CkBAIC0zMjY4LDE4ICsyOTg3LDk2IEBAIHZvaWQgSklU
OjplbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0CiAgICAgZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY3Vy
cmVudEluc3RydWN0aW9uLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckhhc093
blByb3BlcnR5PigpLCBzbG93X3BhdGhfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KTsKIH0K
IAotI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisKK3Zv
aWQgSklUOjplbWl0X29wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2Fs
bCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRfcHJvcGVydHlfZW51bWVy
YXRvcik7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bf
ZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dfcGF0aF9lbnVtZXJhdG9yX25leHQpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7
Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93
UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW51bWVyYXRvcl9n
ZXRfYnlfdmFsKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRG
T1JNKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxs
IHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJh
dG9yX2luX2J5X3ZhbCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6
OmVtaXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0
aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2hhc19vd25fcHJv
cGVydHkpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKKyNlbmRpZgorCisjaWYgVVNF
KEpTVkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVy
IG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKIHsK
ICAgICAvLyB2YWx1ZSBtYXkgYmUgaW52YWxpZCBWaXJ0dWFsUmVnaXN0ZXIgaWYgbW9kZSBpcyBV
bmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyIG9yIFNob3VsZEZpbHRlckJhc2UuCiAgICAgSnVtcCB2
YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9
PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKLSAgICAgICAgZW1pdExvYWRUYWcodmFsdWUs
IHJlZ1QwKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwog
ICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwogICAgIH0KLSAg
ICAKLSAgICBlbWl0TG9hZChvd25lciwgcmVnVDAsIHJlZ1QxKTsKKworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsKKyAgICBKdW1wIG93bmVyTm90Q2VsbDsKKyAgICBp
ZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0
ZXJCYXNlKQorICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwor
CisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCh2bSgp
LCByZWdUMCwgcmVnVDEpOworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvbldyaXRlQmFycmllclNsb3dQYXRoLCAmdm0oKSwgcmVnVDApOworICAgIG93bmVySXNSZW1l
bWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRl
ckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2UpCisgICAgICAgIG93bmVy
Tm90Q2VsbC5saW5rKHRoaXMpOworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8
IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKQorICAgICAgICB2YWx1ZU5vdENlbGwu
bGluayh0aGlzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
ciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIEp1bXAgdmFsdWVOb3RD
ZWxsOworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKQorICAgICAgICB2YWx1ZU5v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworCisgICAgZW1pdFdyaXRlQmFycmllcihv
d25lcik7CisKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKKyAgICAgICAgdmFs
dWVOb3RDZWxsLmxpbmsodGhpcyk7Cit9CisKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisKK3Zv
aWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit7CisgICAgLy8gdmFsdWUgbWF5
IGJlIGludmFsaWQgVmlydHVhbFJlZ2lzdGVyIGlmIG1vZGUgaXMgVW5jb25kaXRpb25hbFdyaXRl
QmFycmllciBvciBTaG91bGRGaWx0ZXJCYXNlLgorICAgIEp1bXAgdmFsdWVOb3RDZWxsOworICAg
IGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFz
ZUFuZFZhbHVlKSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIHJl
Z1QwKTsKKyAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAg
ICB9CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVyLCByZWdUMCwgcmVnVDEpOwog
ICAgIEp1bXAgb3duZXJOb3RDZWxsOwogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2Ug
fHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpCiAgICAgICAgIG93bmVyTm90Q2Vs
bCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CkBAIC0zMjkwLDcgKzMwODcsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3Rl
ciB2YWx1ZSwgV3JpdGVCYQogCiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSB8fCBt
b2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkKICAgICAgICAgb3duZXJOb3RDZWxsLmxp
bmsodGhpcyk7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBT
aG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIAorICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZh
bHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKQogICAgICAgICB2YWx1ZU5v
dENlbGwubGluayh0aGlzKTsKIH0KIApAQCAtMzI5OCwxNyArMzA5NSwxNyBAQCB2b2lkIEpJVDo6
ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdy
aXRlQmFycmllck1vZAogewogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmIChtb2RlID09
IFNob3VsZEZpbHRlclZhbHVlKSB7Ci0gICAgICAgIGVtaXRMb2FkVGFnKHZhbHVlLCByZWdUMCk7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJUYWcodmFsdWUsIHJlZ1QwKTsKICAgICAg
ICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICB9CiAKICAgICBl
bWl0V3JpdGVCYXJyaWVyKG93bmVyKTsKIAotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZh
bHVlKSAKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKICAgICAgICAgdmFsdWVO
b3RDZWxsLmxpbmsodGhpcyk7CiB9CiAKLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQorI2VuZGlm
CiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgV3Jp
dGVCYXJyaWVyTW9kZSBtb2RlKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGM2MGI2MzJlOTRkMWRlZjJmNDIzMGYwYTg0YmU4MzZjZmQ3MzUyYTEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY0OCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKEpJVCkKLSNpZiBVU0UoSlNWQUxV
RTMyXzY0KQotI2luY2x1ZGUgIkpJVC5oIgotCi0jaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmll
cklubGluZXMuaCIKLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJEaXJlY3RBcmd1
bWVudHMuaCIKLSNpbmNsdWRlICJHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCIKLSNpbmNsdWRlICJJ
bnRlcnByZXRlcklubGluZXMuaCIKLSNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCi0jaW5jbHVkZSAi
SlNBcnJheS5oIgotI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJKU0xleGljYWxF
bnZpcm9ubWVudC5oIgotI2luY2x1ZGUgIkpTUHJvbWlzZS5oIgotI2luY2x1ZGUgIkxpbmtCdWZm
ZXIuaCIKLSNpbmNsdWRlICJPcGNvZGVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiUmVzdWx0VHlwZS5o
IgotI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZv
LmgiCi0jaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+Ci0KLQotbmFtZXNwYWNlIEpT
QyB7Ci0gICAgCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1f
cHJvcGVydHk7Ci0gICAgaW50IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGdldHRlciA9IGJ5dGVjb2RlLm1fYWNjZXNzb3I7Ci0KLSAgICBlbWl0
TG9hZFBheWxvYWQoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRMb2FkUGF5bG9hZChnZXR0ZXIsIHJl
Z1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIG1fcHJvZmls
ZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCByZWdUMSwgbV9wcm9maWxlZENvZGVCbG9jay0+
aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dFNldHRlckJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBp
bnQgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
c2V0dGVyID0gYnl0ZWNvZGUubV9hY2Nlc3NvcjsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChiYXNl
LCByZWdUMSk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKHNldHRlciwgcmVnVDMpOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIHJlZ1QxLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3Bl
cnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdl
dHRlclNldHRlckJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBpbnQg
YXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
Z2V0dGVyID0gYnl0ZWNvZGUubV9nZXR0ZXI7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNldHRlciA9
IGJ5dGVjb2RlLm1fc2V0dGVyOwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsK
LSAgICBlbWl0TG9hZFBheWxvYWQoZ2V0dGVyLCByZWdUMyk7Ci0gICAgZW1pdExvYWRQYXlsb2Fk
KHNldHRlciwgcmVnVDQpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0
dGVyLCBtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgcmVnVDEsIG1fcHJvZmls
ZWRDb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlcywgcmVn
VDMsIHJlZ1Q0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5VmFsPigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBw
cm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0g
Ynl0ZWNvZGUubV9hdHRyaWJ1dGVzOwotICAgIFZpcnR1YWxSZWdpc3RlciBnZXR0ZXIgPSBieXRl
Y29kZS5tX2FjY2Vzc29yOwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QyKTsKLSAg
ICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZFBheWxvYWQo
Z2V0dGVyLCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZh
bCwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHJlZ1QyLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApLCBhdHRyaWJ1dGVzLCByZWdUMyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRT
ZXR0ZXJCeVZhbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Owot
ICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgc2V0dGVyID0gYnl0ZWNvZGUubV9hY2Nlc3NvcjsKLQotICAgIGVtaXRMb2Fk
UGF5bG9hZChiYXNlLCByZWdUMik7Ci0gICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QxLCByZWdU
MCk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKHNldHRlciwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIG1fcHJvZmlsZWRDb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgYXR0cmlidXRlcywgcmVn
VDMpOwotfQotCi12b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdpc3RlciBk
c3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywg
dW5zaWduZWQgZGVwdGgpCi17Ci0gICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzLCByZWdUMCk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZyksIHJlZ1QxKTsKLSAgICBlbWl0TG9hZFBheWxvYWQoc2NvcGUsIHJlZ1QwKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKLSAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0U3Rv
cmUoZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7Ci0gICAgdW5zaWduZWQgZGVwdGggPSBtZXRh
ZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKLQotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2Nv
cGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX3By
b2ZpbGVkQ29kZUJsb2NrKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2Nv
cGUpOwotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZDMyKCZtZXRhZGF0
YS5tX2dsb2JhbExleGljYWxCaW5kaW5nRXBvY2gsIHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9wcm9maWxlZENvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCktPmFkZHJlc3NPZkdsb2JhbExleGljYWxCaW5kaW5nRXBvY2go
KSksIHJlZ1QxKSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSwgcmVnVDEpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2Nv
cGUpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEdsb2JhbFZhcjoK
LSAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiAKLSAgICAgICAg
Y2FzZSBHbG9iYWxMZXhpY2FsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3Bl
ID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9wcm9m
aWxlZENvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3Bl
KTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpLCByZWdUMSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoY29uc3RhbnRTY29wZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJl
Z1QxLCByZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6Ci0gICAgICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUoZHN0LCBzY29wZSwgbmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpLCBkZXB0aCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDEpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOwotICAgICAgICAg
ICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVzb2x2ZWRDbG9zdXJlVmFyOgotICAgICAg
ICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH07Ci0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkg
ewotICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAg
ICBsb2FkMzIoJm1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHJlZ1QwKTsKLQotICAgICAgICBKdW1w
IG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHku
bGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9i
YWxMZXhpY2FsVmFyKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5y
ZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlz
dCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVn
VDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBlbWl0Q29k
ZShHbG9iYWxQcm9wZXJ0eSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAg
ICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAg
ICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxM
ZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
LmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICAgICAg
c2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotfQotCi12b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soVmlydHVhbFJlZ2lz
dGVyIHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQotewotICAgIGVtaXRMb2FkKHNj
b3BlLCByZWdUMSwgcmVnVDApOwotICAgIGxvYWRQdHIoc3RydWN0dXJlU2xvdCwgcmVnVDIpOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRHZXRW
YXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9h
ZCkKLXsKLSAgICB1aW50cHRyX3QgcmF3QWRkcmVzcyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KG9wZXJhbmQpOwotICAgIGxvYWQzMihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHJhd0FkZHJlc3MgKyBU
YWdPZmZzZXQpLCB0YWcpOwotICAgIGxvYWQzMihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHJhd0FkZHJl
c3MgKyBQYXlsb2FkT2Zmc2V0KSwgcGF5bG9hZCk7Ci19Ci12b2lkIEpJVDo6ZW1pdEdldFZhckZy
b21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyB0YWcsIEdQUlJlZyBw
YXlsb2FkKQotewotICAgIGxvYWRQdHIob3BlcmFuZCwgcGF5bG9hZCk7Ci0gICAgbG9hZDMyKEFk
ZHJlc3MocGF5bG9hZCwgVGFnT2Zmc2V0KSwgdGFnKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhwYXls
b2FkLCBQYXlsb2FkT2Zmc2V0KSwgcGF5bG9hZCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0R2V0Q2xv
c3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQotewotICAg
IGVtaXRMb2FkKHNjb3BlLCByZWdUMSwgcmVnVDApOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qw
LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBz
aXplb2YoUmVnaXN0ZXIpICsgVGFnT2Zmc2V0KSwgcmVnVDEpOwotICAgIGxvYWQzMihBZGRyZXNz
KHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJh
bmQgKiBzaXplb2YoUmVnaXN0ZXIpICsgUGF5bG9hZE9mZnNldCksIHJlZ1QwKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldEZyb21TY29wZT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUgPSBieXRlY29kZS5tX3Njb3Bl
OwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJl
c29sdmVUeXBlKCk7Ci0gICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1f
c3RydWN0dXJlLnNsb3QoKTsKLSAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKLSAgICAKLSAgICBhdXRv
IGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExv
YWRGb3JPcGVyYW5kKSB7Ci0gICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNr
KHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5q
ZWN0aW9uLgotICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWdUMjsKLSAgICAgICAgICAgIEdQ
UlJlZyByZXN1bHRUYWcgPSByZWdUMTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2Fk
ID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgb2Zmc2V0ID0gcmVnVDM7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIG1vdmUocmVnVDAsIGJhc2UpOwotICAgICAgICAgICAgbG9hZDMyKG9w
ZXJhbmRTbG90LCBvZmZzZXQpOwotICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0g
ICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JF
cXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKLSAgICAg
ICAgICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOwotICAg
ICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgYmFzZSk7Ci0gICAgICAgICAgICBuZWczMihvZmZzZXQpOwotICAgICAgICAgICAgbG9hZDMy
KEJhc2VJbmRleChiYXNlLCBvZmZzZXQsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1Zh
bHVlLCB1LmFzQml0cy5wYXlsb2FkKSArIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdFBheWxvYWQpOwotICAgICAgICAgICAgbG9hZDMy
KEJhc2VJbmRleChiYXNlLCBvZmZzZXQsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1Zh
bHVlLCB1LmFzQml0cy50YWcpICsgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSwgcmVzdWx0VGFnKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKLSAgICAg
ICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQot
ICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2Fz
dDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpT
VmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMSwgcmVnVDApOwotICAgICAgICAgICAgaWYgKHJl
c29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAgICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QxKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgcmVnVDApOwotICAgICAgICAgICAg
ZW1pdEdldENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBEeW5hbWljOgotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAg
Y2FzZSBSZXNvbHZlZENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5
OgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5OgotICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0g
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dl
dFB1dEluZm8sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86
OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAg
ICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwg
ZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgaXNO
b3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQu
bGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFBy
b3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRh
dGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQ
dXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0K
LSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGlz
R2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVy
dHksIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBu
b3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAg
SnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAg
ICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwot
ICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywg
dHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgYWRk
U2xvd0Nhc2UoanVtcCgpKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2
ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwotICAgIGVtaXRT
dG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
ZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEZyb21TY29wZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLCBvcGVyYXRpb25HZXRGcm9t
U2NvcGUsIGRzdCwgbV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJ
bnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1
ZSogb3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17
Ci0gICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRl
KHNldCk7Ci0gICAgdWludHB0cl90IHJhd0FkZHJlc3MgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
PihvcGVyYW5kKTsKLSAgICBzdG9yZTMyKHJlZ1QxLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHJhd0Fk
ZHJlc3MgKyBUYWdPZmZzZXQpKTsKLSAgICBzdG9yZTMyKHJlZ1QwLCBiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KHJhd0FkZHJlc3MgKyBQYXlsb2FkT2Zmc2V0KSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0
R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQot
ewotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwotICAgIGxvYWRQdHIoaW5kaXJl
Y3RXYXRjaHBvaW50U2V0LCByZWdUMik7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKCppbmRpcmVjdFdh
dGNocG9pbnRTZXQpOyAvLyBGSVhNRTogPz8KLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQs
IHJlZ1QyKTsKLSAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBUYWdPZmZzZXQpKTsK
LSAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QyLCBQYXlsb2FkT2Zmc2V0KSk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVpbnRw
dHJfdCBvcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkK
LXsKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBlbWl0TG9hZChzY29w
ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKLSAgICBzdG9yZTMy
KHJlZ1QzLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJp
YWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpICsgVGFnT2Zmc2V0KSk7Ci0gICAg
c3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNl
dE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZz
ZXQpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9wcm9maWxlZENvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fcHJvZmlsZWRDb2RlQmxvY2spLm1fZ2V0UHV0SW5mbzsKLSAgICBSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUq
KiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRw
dHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0
YS5tX29wZXJhbmQpOwotICAgIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKLSAgICAgICAgc3dp
dGNoIChyZXNvbHZlVHlwZSkgewotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAg
ICAgZW1pdFdyaXRlQmFycmllcihtX3Byb2ZpbGVkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
dmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVj
dHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVy
cyB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QzLCByZWdU
Mik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgbG9hZFB0cihv
cGVyYW5kU2xvdCwgcmVnVDEpOwotICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKLSAgICAgICAg
ICAgIHN0b3JlMzIocmVnVDMsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChm
aXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwotICAgICAg
ICAgICAgc3RvcmUzMihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwg
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHbG9iYWxWYXI6Ci0g
ICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgY2Fz
ZSBHbG9iYWxMZXhpY2FsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0g
SlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9wcm9maWxl
ZENvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsK
LSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRW
YXJSZWFkT25seUNoZWNrKHJlc29sdmVUeXBlLCByZWdUMCk7Ci0gICAgICAgICAgICBpZiAoIWlz
SW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29s
dmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgbmVl
ZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdl
IG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCi0gICAgICAgICAgICAgICAgaWYg
KGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJG
cm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwg
cmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xv
dCksIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZF
bXB0eShyZWdUMSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJl
Y3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFkYXRh
Lm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1p
dFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwg
dmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIFJlc29sdmVkQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBD
bG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRl
clZhbHVlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9z
dXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRT
ZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAg
ICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgICAgICBj
YXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAg
IHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgIGNh
c2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBM
aXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJl
Z1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwg
cmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xv
YmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihyZXNvbHZl
VHlwZSkpOwotICAgICAgICBKdW1wIGlzR2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNh
bFZhcikpOwotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOyAvLyBEeW5hbWljLCBpdCBjYW4g
aGFwcGVuIGlmIHdlIGF0dGVtcHQgdG8gcHV0IGEgdmFsdWUgdG8gYWxyZWFkeS1pbml0aWFsaXpl
ZCBjb25zdCBiaW5kaW5nLgotCi0gICAgICAgIGlzR2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMp
OwotICAgICAgICBlbWl0Q29kZShuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkg
PyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxW
YXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAg
aXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlw
ZSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lw
VG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7Ci0g
ICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3Bl
cnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkp
KTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsK
LSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKLSAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikp
OwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tp
cFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmso
dGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLQotICAgICAg
ICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVm
YXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKLSAg
ICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fcHJvZmlsZWRD
b2RlQmxvY2spLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIGlmIChyZXNvbHZlVHlw
ZSA9PSBNb2R1bGVWYXIpIHsKLSAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0
aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF90aHJvd19zdHJpY3RfbW9kZV9yZWFk
b25seV9wcm9wZXJ0eV93cml0ZV9lcnJvcik7Ci0gICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwg
bV9wcm9maWxlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIGN1cnJlbnRJbnN0cnVjdGlvbik7
Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50cz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9
IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwotICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7
Ci0KLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KTsKLSAgICAKLSAgICBlbWl0TG9hZFBheWxvYWQoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5k
ZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIFRhZ09mZnNldCksIHJlc3VsdFJl
Z3MudGFnR1BSKCkpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6
OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikg
KyBQYXlsb2FkT2Zmc2V0KSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdFJlZ3MpOwotICAgIGVtaXRTdG9yZShkc3Qs
IHJlc3VsdFJlZ3MudGFnR1BSKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0VG9Bcmd1bWVudHM+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50cyA9
IGJ5dGVjb2RlLm1fYXJndW1lbnRzOwotICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICAKLSAg
ICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsK
LSAgICAKLSAgICBlbWl0TG9hZFBheWxvYWQoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgZW1pdExv
YWQodmFsdWUsIHJlZ1QxLCByZWdUMik7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdU
MCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pICsgVGFnT2Zmc2V0KSk7Ci0gICAgc3RvcmUzMihyZWdUMiwgQWRk
cmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgUGF5bG9hZE9mZnNldCkpOwotfQotCi12b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OwotICAgIHVuc2lnbmVkIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLQotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotCi0gICAgZW1pdExv
YWRQYXlsb2FkKGJhc2UsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMiwgSlNJbnRl
cm5hbEZpZWxkT2JqZWN0SW1wbDw+OjpvZmZzZXRPZkludGVybmFsRmllbGQoaW5kZXgpICsgVGFn
T2Zmc2V0KSwgcmVzdWx0UmVncy50YWdHUFIoKSk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDIs
IEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4
KSArIFBheWxvYWRPZmZzZXQpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Ci0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0UmVncyk7Ci0gICAgZW1pdFN0b3JlKGRz
dCwgcmVzdWx0UmVncy50YWdHUFIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dEludGVybmFsRmllbGQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZTsKLSAgICB1bnNpZ25lZCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0KLSAgICBl
bWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDApOwotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwg
cmVnVDIpOwotICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTSW50ZXJuYWxGaWVs
ZE9iamVjdEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSArIFRhZ09mZnNldCkp
OwotICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIEpTSW50ZXJuYWxGaWVsZE9iamVj
dEltcGw8Pjo6b2Zmc2V0T2ZJbnRlcm5hbEZpZWxkKGluZGV4KSArIFBheWxvYWRPZmZzZXQpKTsK
LSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci19
Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQ
YXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRfcHJvcGVydHlf
ZW51bWVyYXRvcik7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJhdG9yX25leHQpOwotICAgIHNsb3dQYXRoQ2FsbC5j
YWxsKCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIEpJVFNsb3dQYXRoQ2Fs
bCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW51bWVy
YXRvcl9nZXRfYnlfdmFsKTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpCi17Ci0gICAgVU5SRUFDSEFCTEVfRk9S
X1BMQVRGT1JNKCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU2xvd1Bh
dGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9l
bnVtZXJhdG9yX2luX2J5X3ZhbCk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRo
Q2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2hhc19v
d25fcHJvcGVydHkpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIEpTQwotCi0jZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKLSNlbmRpZiAvLyBFTkFCTEUo
SklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJ
VC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oCmluZGV4IDdj
YTFiNGU3YzNmZDA4NGRkMjdhYzM4NTA2YWE5YzZhZWQ5NWRlYjAuLmYxODZmYjgyYjFmZjk3OGQ4
ZjY3YTRmMDUzMzhlOWNmYjRjODIzNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pT
SW50ZXJmYWNlSklULmgKQEAgLTM2LDcgKzM2LDcgQEAKICNpZiBFTkFCTEUoSklUKQogCiBuYW1l
c3BhY2UgSlNDIHsKLSAgICBjbGFzcyBKU0ludGVyZmFjZUpJVCA6IHB1YmxpYyBDQ2FsbEhlbHBl
cnMsIHB1YmxpYyBHUFJJbmZvLCBwdWJsaWMgRlBSSW5mbyB7CisgICAgY2xhc3MgSlNJbnRlcmZh
Y2VKSVQgOiBwdWJsaWMgQ0NhbGxIZWxwZXJzLCBwdWJsaWMgR1BSSW5mbywgcHVibGljIEpTUklu
Zm8sIHB1YmxpYyBGUFJJbmZvIHsKICAgICBwdWJsaWM6CiAKICAgICAgICAgSlNJbnRlcmZhY2VK
SVQoVk0qIHZtID0gbnVsbHB0ciwgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCmluZGV4IGRiZDVh
YmQzNzg4ZDcxYjgwMzA1YmI4NTFmYmNjMjcxM2U4N2IwMGUuLjhlYjU3YzA5N2IzMGJiNjljOWEy
ZWFhZGFjODM5ZjNiZWRlMmM2OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvVGh1bmtHZW5lcmF0b3JzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ro
dW5rR2VuZXJhdG9ycy5jcHAKQEAgLTQxLDggKzQxLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LSNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKLQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQogewogICAgIEND
YWxsSGVscGVycyBqaXQ7CkBAIC02MSw2ICs1OSw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKICAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJoYW5kbGVFeGNl
cHRpb24iKTsKIH0KIAorI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQorCiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVS
b2xsYmFja0dlbmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKQEAgLTc3
LDE0ICs3NywyMCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGhhbmRs
ZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja0dlbmVyYQogICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgImhhbmRsZUV4Y2VwdGlvbldpdGhD
YWxsRnJhbWVSb2xsYmFjayIpOwogfQogCisjZW5kaWYKKwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9u
R2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0OwogCiAjaWYgQ1BVKFg4
Nl82NCkKICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDIgKiBzaXpl
b2YoQ1BVUmVnaXN0ZXIpKSwgWDg2UmVnaXN0ZXJzOjplc3ApOwotI2VsaWYgQ1BVKEFSTTY0KQor
I2VsaWYgQ1BVKEFSTTY0KSB8fCBDUFUoQVJNX1RIVU1CMikKICAgICBqaXQucG9wUGFpcihDQ2Fs
bEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OmxpbmtSZWdpc3Rl
cik7CisjZWxpZiBDUFUoTUlQUykKKyAgICBqaXQucG9wUGFpcihDQ2FsbEhlbHBlcnM6OmZyYW1l
UG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnJldHVybkFkZHJlc3NSZWdpc3Rlcik7Cisj
ZWxzZQorIyAgIGVycm9yICJOb3QgaW1wbGVtZW50ZWQgb24gcGxhdGZvcm0iCiAjZW5kaWYKIAog
ICAgIENDYWxsSGVscGVyczo6SnVtcCBjb250aW51YXRpb24gPSBqaXQuanVtcCgpOwpAQCAtOTUs
NiArMTAxLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVu
a1N0YWNrUHJlc2VydmVzQW5kSGFuZGxlRXhjZXB0aW9uR2UKICAgICByZXR1cm4gRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJwb3BUaHVua1N0YWNrUHJlc2VydmVz
QW5kSGFuZGxlRXhjZXB0aW9uIik7CiB9CiAKKyNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
KwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaGVja0V4Y2VwdGlvbkdl
bmVyYXRvcihWTSYgdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCmluZGV4IGFiN2NmNjZjNDIxNTFlZTAxOTU4
YzFhYjIyZjI5ZmNkOGRkNzAxNGUuLjYzMWE1OTZmMmZkNjQyYTZiYjcyZDg5YTIzYWU0ZGY1OWYz
ZDc2OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0
b3JzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaApA
QCAtMzcsMTIgKzM3LDEyIEBAIGNsYXNzIFZNOwogCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVO
S1MpCiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaGFuZGxlRXhjZXB0
aW9uR2VuZXJhdG9yKFZNJik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IGhhbmRsZUV4Y2VwdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja0dlbmVyYXRvcihWTSYpOwotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBwb3BUaHVua1N0YWNrUHJlc2VydmVz
QW5kSGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CiAKICNlbmRpZiAvLyBFTkFCTEUoRVhU
UkFfQ1RJX1RIVU5LUykKIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBo
YW5kbGVFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gcG9wVGh1bmtTdGFja1ByZXNlcnZlc0FuZEhhbmRsZUV4Y2VwdGlvbkdlbmVy
YXRvcihWTSYpOwogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcihWTSYpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAppbmRleCBhOWI3ZTMyMTNlMzc2MjA3MmNm
ZWJjY2YyY2UzZWM2ZTcwMzM3MmQzLi45NTdhZWE0MjFmM2EzOWI1MzFmOGJkYjhkM2EwMjYzOTA2
NzhkZWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
TGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgK
QEAgLTUzMiw3ICs1MzIsNyBAQCBib29sIGNhblVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpOwog
ICAgIHYoQm9vbCwgdXNlRGF0YUlDLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihC
b29sLCB1c2VEYXRhSUNJbk9wdGltaXppbmdKSVQsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwK
ICAgICB2KEJvb2wsIHVzZURhdGFJQ1NoYXJpbmcsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwK
LSAgICB2KEJvb2wsIHVzZUJhc2VsaW5lSklUQ29kZVNoYXJpbmcsIHRydWUsIE5vcm1hbCwgbnVs
bHB0cikgXAorICAgIHYoQm9vbCwgdXNlQmFzZWxpbmVKSVRDb2RlU2hhcmluZywgaXM2NEJpdCgp
LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCiAgICAgLyogRmVhdHVyZSBGbGFncyAqL1wKICAg
ICBcCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXgg
OGRlOWEyNWI2MGZiNDVlMmRlMGEwMjJlZWQ1YmJmMjc1YThjZTc5Ni4uNWRmMjA5ZmNiYjNhMWM3
MzI3ZTE1MDRkMGQ2ZTI2MWQyNWUxN2Q4ZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisr
KyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTExLTE1ICBHZXphIExv
cmUgIDxnbG9yZUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtKU0NdIE1ha2Ugc2hhcmluZyBvZiB1
bmxpbmtlZCBiYXNlbGluZSBjb2RlIHBvc3NpYmxlIG9uIEpTVkFMVUUzMl82NAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNjI0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGV4dHJhIFN1blNwaWRl
ciBydW4gb24gMzItYml0IHBsYXRmb3JtcyBleGVyY2lzZWluZyBiYXNlbGluZSBKSVQKKyAgICAg
ICAgY29kZSBzaGFyaW5nLgorCisgICAgICAgICogU2NyaXB0cy9ydW4tamF2YXNjcmlwdGNvcmUt
dGVzdHM6CisgICAgICAgIChydW5KU0NTdHJlc3NUZXN0cyk6CisKIDIwMjEtMTEtMTQgIEJyYWR5
IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIEdldCBkYWVtb24gQVBJIHJl
YWR5IHRvIHdvcmsgaW4gdGhlIGlPUyBzaW11bGF0b3IgKHN0YXJ0aW5nIHdpdGggV2ViUHVzaEQp
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1bi1qYXZhc2NyaXB0Y29yZS10ZXN0cyBiL1Rv
b2xzL1NjcmlwdHMvcnVuLWphdmFzY3JpcHRjb3JlLXRlc3RzCmluZGV4IGZiMjFiZmU3MWE0ZjVj
OGFlN2UzMmJmMmYxN2RlNWY0YzQ4NTY1OTcuLjc4N2E2ZjQ2NzhjODFkNTZjN2U0NmY3YjE3ZDY5
YjM5ZTQ5MjZmMDQgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWphdmFzY3JpcHRjb3Jl
LXRlc3RzCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWphdmFzY3JpcHRjb3JlLXRlc3RzCkBAIC03
NTQsNiArNzU0LDcgQEAgc3ViIHJ1bkpTQ1N0cmVzc1Rlc3RzCiAgICAgICAgICAgICAiSlNUZXN0
cy9leGNlcHRpb25GdXp6LnlhbWwiLAogICAgICAgICAgICAgIlBlcmZvcm1hbmNlVGVzdHMvU3Vu
U3BpZGVyL25vLWFyY2hpdGVjdHVyZS1zcGVjaWZpYy1vcHRpbWl6YXRpb25zLnlhbWwiLAogICAg
ICAgICAgICAgIlBlcmZvcm1hbmNlVGVzdHMvU3VuU3BpZGVyL3NoYWRvdy1jaGlja2VuLnlhbWwi
LAorICAgICAgICAgICAgIlBlcmZvcm1hbmNlVGVzdHMvU3VuU3BpZGVyL3dpdGgtYmFzZWxpbmUt
Y29kZS1zaGFyaW5nLnlhbWwiLAogICAgICAgICAgICAgIlBlcmZvcm1hbmNlVGVzdHMvU3VuU3Bp
ZGVyL3Rlc3RzL3Y4LXY2IiwKICAgICAgICAgICAgICJKU1Rlc3RzL3N0cmVzcyIsCiAgICAgICAg
ICAgICAiSlNUZXN0cy9taWNyb2JlbmNobWFya3MiLApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TdW5TcGlkZXIvQ2hhbmdlTG9nIGIvUGVyZm9ybWFuY2VUZXN0cy9TdW5TcGlkZXIvQ2hh
bmdlTG9nCmluZGV4IGFlMzczMzdkMTFlYzAzM2NiYjU1NGVjYjVhZWY4Y2U5NWY1ZThmMjUuLmU5
MzFiNGViMDY2OWRhMGI4MTM0MTFjOTFiZWY1Yjg0YTE0Y2E2M2MgMTAwNjQ0Ci0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3VuU3BpZGVyL0NoYW5nZUxvZworKysgYi9QZXJmb3JtYW5jZVRlc3RzL1N1
blNwaWRlci9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAyMS0xMS0xNSAgR2V6YSBMb3Jl
ICA8Z2xvcmVAaWdhbGlhLmNvbT4KKworICAgICAgICBbSlNDXSBNYWtlIHNoYXJpbmcgb2YgdW5s
aW5rZWQgYmFzZWxpbmUgY29kZSBwb3NzaWJsZSBvbiBKU1ZBTFVFMzJfNjQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjYyNAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBleHRyYSBTdW5TcGlkZXIg
cnVuIG9uIDMyLWJpdCBwbGF0Zm9ybXMgZXhlcmNpc2VpbmcgYmFzZWxpbmUgSklUCisgICAgICAg
IGNvZGUgc2hhcmluZy4KKworICAgICAgICAqIHdpdGgtYmFzZWxpbmUtY29kZS1zaGFyaW5nLnlh
bWw6IEFkZGVkLgorCiAyMDE5LTExLTIwICBDYWlvIExpbWEgIDx0aWNhaW9saW1hQGdtYWlsLmNv
bT4KIAogICAgICAgICBbSlNDXSBPU1IgZXhpdCB0byBMTEludCBpcyBicm9rZW4gb24gTUlQUwpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TdW5TcGlkZXIvd2l0aC1iYXNlbGluZS1jb2Rl
LXNoYXJpbmcueWFtbCBiL1BlcmZvcm1hbmNlVGVzdHMvU3VuU3BpZGVyL3dpdGgtYmFzZWxpbmUt
Y29kZS1zaGFyaW5nLnlhbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzQwYWQ1ZGY3NjZhM2MwZmZjOTAyZTRkNjM2
Y2FjYTNiMGQxNDExMgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3VuU3Bp
ZGVyL3dpdGgtYmFzZWxpbmUtY29kZS1zaGFyaW5nLnlhbWwKQEAgLTAsMCArMSwzNSBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLiAKKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LiAKKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyMgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisjIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyMgVGVzdHMgU3VuU3BpZGVyIHdpdGggYmFz
bGluZSBjb2RlIHNoYXJpbmcgYWx3YXlzIGVuYWJsZWQuIE9uIDY0LWJpdAorIyBwbGF0Zm9ybXMg
KHdoaWNoIHVzZSBiYXNlbGluZSBjb2RlIHNoYXJpbmcgYnkgZGVmYXVsdCkgdGhpcyBpcyByZWR1
bmRhbmQKKyMgYW5kIGlzIGhlbmNlIHNraXBwZWQuCisKKy0gcGF0aDogdGVzdHMvc3Vuc3BpZGVy
LTEuMAorICBjbWQ6IHwKKyAgICAgIGlmICgkYXJjaGl0ZWN0dXJlID09ICJhcm0iIHx8ICRhcmNo
aXRlY3R1cmUgPT0gIm1pcHMiKQorICAgICAgICAgIHJlcXVpcmVPcHRpb25zKCItLXVzZUJhc2Vs
aW5lSklUQ29kZVNoYXJpbmc9dHJ1ZSIpCisgICAgICAgICAgZGVmYXVsdFJ1bgorICAgICAgZWxz
ZQorICAgICAgICAgIHNraXAKKyAgICAgIGVuZAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>